PHP 的Cookie跨域使用實現

2021-08-30 19:00:30 字數 2052 閱讀 5888

cookie真是乙個偉大的發明,它允許web開發者保留他們的使用者的登入狀態。然而,當你的站點或網路

有乙個以上的網域名稱時就會出現問題了。

在cookie規範上說,乙個cookie只能用於乙個網域名稱,不能夠發給其它的網域名稱。因此,如果在瀏覽器中對乙個網域名稱設定了乙個cookie,這個cookie對於其它的網域名稱將無效。如果你想讓你的使用者從你的站點中的其中乙個進行登入,同時也可以在其它網域名稱上進行登入,這可真是乙個大難題。

我的解決方案將使用下面的一般框架:

乙個預置的指令碼將用來接受通過get或cookie方式傳遞過來的sessionid號。它將比cookie優先選擇get

變數。所以,無論何時需要引用交叉的網域名稱時,我們把sessionid做為乙個url引數進行傳送。修改apache配置,用來實現重寫所有的交叉網域名稱的cookie。這樣做的原因一會兒就會清楚了。在任何時候出現乙個交叉網域名稱引用時使用變數。

第一步:建立預置指令碼

將下面的**加到預置指令碼中(或出現在所有指令碼之前的函式中)。

<?php

/* 支援交叉網域名稱cookie... */

// 如果get變數已經設定了,並且它與cookie變數不同

//則使用get變數(更新cookie)

一旦這個**執行之後,乙個全域性的'sessionid'變數將可以用於指令碼。它將儲存著使用者的cookie中的

sessionid值,或者是通過get請求發來的sessionid值。

第二步:為所有的交叉網域名稱引用使用變數

建立乙個全域性的配置檔案,用於存放可以進行切換的網域名稱的基本引用形式。例如,如果我們擁有

domain1.com和domain2.com,則如下設定:

<?php

$domains['domain1'] = "";

$domains['domain2'] = "";

?>

現在,如果在**中如下做:

<?php

echo "click here to contact us.";

?>

你將產生如下的輸出:

click here

to contact us.

在這裡sessionid已經被插入到url中去了。

在這個地方,你可能會想"這樣可能會在web伺服器上開啟名為橫線,sessionid,橫線的子目錄?!?!?"。

然而,下面的步驟將提供乙個必需的戲法,以便讓它能夠使用!

第三步:配置apache

現在,剩下的步驟就是配置apache來重寫這個url:

變成這樣:

並且這種url:

?email=yes

變成這樣:

... 6543afe6543asdf6asd

為了實現它,簡單地配置兩個虛擬伺服器,作為domain1和domain2,如下操作:

documentroot /usr/local/www/domain1

servername www.domain1.com

rewriteengine on

rewriterule ^/-(.*)-(.*?.*)$ &sessionid= [l,r,qsa]

rewriterule ^/-(.*)-(.*)$ ?sessionid= [l,r,qsa]

documentroot /usr/local/www/domain2

servername www.domain2.com

rewriteengine on

rewriterule ^/-(.*)-(.*?.*)$ &sessionid= [l,r,qsa]

rewriterule ^/-(.*)-(.*)$ ?sessionid= [l,r,qsa]

php跨域cookie共享使用方法

a 機器所在的域 a1.main.com,a 有應用 main.php b 機器所在的域 b1.test.com,b 有應用 test.php 1.在 main.php 裡設定 cookie 的時候,cookie 的設定方法如下 複製 如下 setcookie testcookie okol tim...

使用iframe跨域共享cookie

請首先修改hosts檔案來模擬本機跨域 127.0.0.1 localhost 127.0.0.1 b.com 127.0.0.1 a.com 我們的目的 由a.com登入,如果登入成功,就生成a.com的cookie。而對於b.com則無需再次登入。遇到的困難 瀏覽器同源策略限制,即a站點頁面的指...

ajax跨域與cookie跨域

ajax跨域取資料 利用可以跨域載入js的原理 functioncallback 這是需要返回這樣乙個js函式 ajax資料型別使用jsonp 如 ajax url callbask x datatype jsonp type get 在使用資料型別為jsonp時,jquery自動會在url路徑上拼...