程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 實現跨域名Cookie

實現跨域名Cookie

編輯:關於PHP編程

Cookie真是一個偉大的發明,它允許web開發者保留他們的用戶的登錄狀態。然而,當你的站點或網絡
有一個以上的域名時就會出現問題了。
  在Cookie規范上說,一個cookie只能用於一個域名,不能夠發給其它的域名。因此,如果在浏覽器中對一個域名設置了一個cookie,這個cookie對於其它的域名將無效。如果你想讓你的用戶從你的站點中的其中一個進行登錄,同時也可以在其它域名上進行登錄,這可真是一個大難題。
  我的解決方案將使用下面的一般框架:
一個預置的腳本將用來接受通過GET或COOKIE方式傳遞過來的sessionid號。它將比COOKIE優先選擇GET
變量。所以,無論何時需要引用交叉的域名時,我們把sessionid做為一個URL參數進行發送。修改Apache配置,用來實現重寫所有的交叉域名的cookie。這樣做的原因一會兒就會清楚了。在任何時候出現一個交叉域名引用時使用變量。
第一步:創建預置腳本
  將下面的代碼加到預置腳本中(或出現在所有腳本之前的函數中)。

<?php
/* 支持交叉域名cookie... */
// 如果GET變量已經設置了,並且它與cookie變量不同
//則使用get變量(更新cookie)
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS;
if (isset($sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['sessionid'] != $HTTP_GET_VARS['sessionid'])) {
SetCookie('sessionid', $HTTP_GET_VARS['sessionid'], 0, '/', '');
$HTTP_COOKIE_VARS['sessionid'] = $HTTP_GET_VARS['sessionid'];
$sessionid = $HTTP_GET_VARS['sessionid'];
}
?>
  一旦這個代碼運行之後,一個全局的'sessionid'變量將可以用於腳本。它將保存著用戶的cookie中的
sessionid值,或者是通過GET請求發來的sessionid值。
第二步:為所有的交叉域名引用使用變量
  創建一個全局的配置文件,用於存放可以進行切換的域名的基本引用形式。例如,如果我們擁有
domain1.com和domain2.com,則如下設置:

<?php
$domains['domain1'] = "http://www.domain1.com/-$sessionid-";
$domains['domain2'] = "http://www.domain2.com/-$sessionid-";
?>
  現在,如果在代碼中如下做:

<?php
echo "Click &lt;a href="", $domains['domain2'], "/contact/?email=yes"&gt;here&lt;/a&gt; to contact us.";

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved