跨域訪問php代理解決方案(php設置跨域訪問)

本文目錄一覽:

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-hk/n/130749.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
S4OWU的頭像S4OWU
上一篇 2024-10-03 23:29
下一篇 2024-10-03 23:29

相關推薦

發表回復

登錄後才能評論