本文目錄一覽:
PHP 如何實現不同網站登錄跨域的問題
可以用sso單點登錄解決這個問題,本質是不同的域名能同時記錄同一個cookie
很久之前做過這個功能,有點忘了,大概的步驟:
例如你在test1.com登錄成功後,會給一個應用中心發請求,這個應用中心保存着所有的sso登錄的設置cookie的url,每個應用組裝成一個script標籤返回給你
你接收到這些script標籤後,讓這些標籤執行就可以了,例如B站點的響應中就會有setCookie這個響應頭,這樣B站點的登錄cookie就在你的瀏覽器上保存了
每個站點在你的瀏覽器上都有cookie了,自然就處於登錄狀態了
很久之前做過的,大體思想是這些
PHP如何實現跨域
因工作需要,客戶端軟件的一些界面用HTML+CSS+Javascript實現,這些文件放在客戶端本地,以本地文件形式加載,但是有些情況下,需要連接服務器取得一些信息,如果不做任何處理,則請求失敗,返回的信息如下:
No
‘Access-Control-Allow-Origin’
header
is
present
on
the
requested
resource.
Origin
‘null’
is
therefore
not
allowed
access.
這是因為瀏覽器跨域策略起作用,阻止了跨域的請求。看看HTTP請求過程就知道。第一次請求後端時候,瀏覽器意識到是訪問一個跨與資源,沒有直接發送GET請求獲取數據,而是發送了一個OPTIONS請求詢問是否可以訪問該資源。我們稱之為Preflight請求,默認因為同源策略的存在,該請求返回的Header中沒有’Access-Control-Allow-Origin’屬性,所以訪問失敗。
如果要實現跨域,關鍵在於服務器,客戶端的代碼按照正常的方式編寫即可。對於服務器,只需要在收到OPTIONS請求的地方,返回的頭信息中增加該屬性即可,代碼如下:
header(“Access-Control-Allow-Origin:
*”);
注意,一定要在所有信息輸出到客戶端之前設置。
以上所述是小編給大家介紹的PHP如何實現跨域的相關內容,希望對大家有所幫助!
PHP跨域上傳的幾種方法
方法一:
文件夾:/home/web/attachments
虛擬二級目錄到/home/web/zxsv/下(支持同局域網的服務器)
這樣多個子域名進行上傳的設計時,只需要attachments目錄映射為相關的域名的二級目錄,這樣就可實現多個子域名共享一個附件服務器了,這種方法最好是用局域網中的附件服務器,這樣流量是分開的,當然訪問附件的域名是apache,ngixn,IIS等的虛擬二級目錄就不說了,好處是現有程序不做任何修改,唯一壞處就是兩台服務器必須在一個局域網中,當然你用單台也就沒這個問題了
方法二:FTP同步更新
PHP是支持FTP的,給個FTP類裡面(不是我寫的,只是加了個建立多級目錄),自己看着辦吧,上傳後調用FTP類,同步到FTP服務器中,好處是現有程序只需要在上傳那段加上FTP上傳就行了,壞處就是一定要支持FTP
?php
$ftp=new Ftp;
//print_r($ftp-nlist(””));
$ftp-makedir(”3″);
//$ftp-put(”comment.php”,”1.txt”);
$ftp-bye();
//R FTP 處理;
class ftp {
var $ftpUrl = ‘’;
var $ftpUser = ‘zxsv’;
var $ftpPass = ‘111111′;
var $ftpDir = ‘/zxsv/’;
var $ftpR = ”; //R ftp資源;
var $status = ”;
//R 1:成功;2:無法連接ftp;3:用戶錯誤;
function ftp() {
if ($this-ftpR = ftp_connect($this-ftpUrl, 21)) {
if (ftp_login($this-ftpR, $this-ftpUser, $this-ftpPass)) {
if (!empty($this-ftpDir)) {
ftp_chdir($this-ftpR, $this-ftpDir);
}
ftp_pasv($this-ftpR, true);//R 啟用被動模式;
$status = 1;
} else {
$status = 3;
}
} else {
$status = 2;
}
}
//R 切換目錄;
function cd($dir) {
return ftp_chdir($this-ftpR, $dir);
}
//建立目錄
function mkdir($dir){
return ftp_mkdir($this-ftpR, $dir);
}
function makedir($dir) {
if(!$dir) return 0;
$dir = str_replace( “\\”, “/”, $dir );
$mdir = “”;
foreach(explode( “/”, $dir ) as $val ) {
$mdir .= $val.”/”;
if( $val == “..” || $val == “.” ) continue;
if(!@mkdir($mdir)){
echo “創建目錄 [“.$mdir.”]失敗.”;
//exit;
}
}
return true;
}
//刪除目錄
function rmdir($dir){
return ftp_rmdir($this-ftpR, $dir);
}
//R 返回當前路勁;
function pwd() {
return ftp_pwd($this-ftpR);
}
//R 上傳文件;
function put($localFile, $remoteFile = ”) {
if ($remoteFile == ”) {
$remoteFile = end(explode(’/’, $localFile));
}
$res = ftp_nb_put($this-ftpR, $remoteFile, $localFile, FTP_BINARY);
print_r($res);
while ($res == FTP_MOREDATA) {
$res = ftp_nb_continue($this-ftpR);
}
if ($res == FTP_FINISHED) {
return true;
} elseif ($res == FTP_FAILED) {
return false;
}
}
//R 下載文件;
function get($remoteFile, $localFile = ”) {
if ($localFile == ”) {
$localFile = end(explode(’/’, $remoteFile));
}
if (ftp_get($this-ftpR, $localFile, $remoteFile, FTP_BINARY)) {
$flag = true;
} else {
$flag = false;
}
return $flag;
}
//R 文件大小;
function size($file) {
return ftp_size($this-ftpR, $file);
}
//R 文件是否存在;
function isFile($file) {
if ($this-size($file) = 0) {
return true;
} else {
return false;
}
}
//R 文件時間
function fileTime($file) {
return ftp_mdtm($this-ftpR, $file);
}
//R 刪除文件;
function unlink($file) {
return ftp_delete($this-ftpR, $file);
}
function nlist($dir = ‘/service/resource/’) {
return ftp_nlist($this-ftpR, $dir);
}
//R 關閉連接;
function bye() {
return ftp_close($this-ftpR);
}
}
?
php什麼是跨域,怎麼解決跨域問題
服務器端PHP跨域一般沒有限制,不像瀏覽器端有same origin policy。
把服務器B中的代碼封裝一下,確定好輸入和輸出,比如輸入是一個HTTP Request,參數POST過去;輸出是從HTTP Response返回一段XML。之後在服務器A的代碼中做一個對服務器B的HTTP請求並處理返回的XML就好了
原創文章,作者:S4OWU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/130749.html