国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

PHP實現(xiàn)跨域名Cookie

2024-05-04 23:05:02
字體:
供稿:網(wǎng)友

最大的網(wǎng)站源碼資源下載站,

  cookie真是一個偉大的發(fā)明,它允許者保留他們的用戶的登錄狀態(tài)。然而,當你的站點或網(wǎng)絡(luò) 
有一個以上的域名時就會出現(xiàn)問題了。 


  在cookie規(guī)范上說,一個cookie只能用于一個域名,不能夠發(fā)給其它的域名。因此,如果在瀏覽器中對 
一個域名設(shè)置了一個cookie,這個cookie對于其它的域名將無效。如果你想讓你的用戶從你的站點中的其中 
一個進行登錄,同時也可以在其它域名上進行登錄,這可真是一個大難題。 


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

一個預(yù)置的腳本將用來接受通過get或cookie方式傳遞過來的sessionid號。它將比cookie優(yōu)先選擇get 
變量。所以,無論何時需要引用交叉的域名時,我們把sessionid做為一個url參數(shù)進行發(fā)送。 
修改apache配置,用來實現(xiàn)重寫所有的交叉域名的cookie。這樣做的原因一會兒就會清楚了。 
在任何時候出現(xiàn)一個交叉域名引用時使用變量。 
第一步:創(chuàng)建預(yù)置腳本 
  將下面的代碼加到預(yù)置腳本中(或出現(xiàn)在所有腳本之前的函數(shù)中)。 

<?php 

/* 支持交叉域名cookie... */ 

// 如果get變量已經(jīng)設(shè)置了,并且它與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請求發(fā)來的sessionid值。 


第二步:為所有的交叉域名引用使用變量 
  創(chuàng)建一個全局的配置文件,用于存放可以進行切換的域名的基本引用形式。例如,如果我們擁有 
domain1.com和domain2.com,則如下設(shè)置: 

<?php 

$domains[/'domain1/'] = "http://www.domain1.com/-$sessionid-"; 
$domains[/'domain2/'] = "http://www.domain2.com/-$sessionid-"; 

?> 

  現(xiàn)在,如果在代碼中如下做: 

<?php 

echo "click <a href=/"", $domains[/'domain2/'], "/contact/?email=yes/">here</a> to contact us."; 

?> 
  你將產(chǎn)生如下的輸出: 

click <a >here</a> 
to contact us. 

  在這里sessionid已經(jīng)被插入到url中去了。 

  在這個地方,你可能會想"這樣可能會在web服務(wù)器上打開名為橫線,sessionid,橫線的子目錄?!?!?"。 
然而,下面的步驟將提供一個必需的戲法,以便讓它能夠使用! 


第三步:配置apache 
  現(xiàn)在,剩下的步驟就是配置apache來重寫這個url: 

http://www.domain2.com/-66543afe6543asdf6asd-/contact/ 
  變成這樣: 

http://www.domain2.com/contact/?sessionid=66543afe6543asdf6asd 
  并且這種url: 

http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes 
  變成這樣: 

http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd 
  為了實現(xiàn)它,簡單地配置兩個虛擬服務(wù)器,作為domain1和domain2,如下操作: 

<virtualhost ipaddress> 
documentroot /usr/local/www/domain1 
servername www.domain1.com 
rewriteengine on 
rewriterule ^/-(.*)-(.*/?.*)$ $2&sessionid=$1 [l,r,qsa] 
rewriterule ^/-(.*)-(.*)$ $2?sessionid=$1 [l,r,qsa] 
</virtualhost> 

<virtualhost ipaddress> 
documentroot /usr/local/www/domain2 
servername www.domain2.com 
rewriteengine on 
rewriterule ^/-(.*)-(.*/?.*)$ $2&sessionid=$1 [l,r,qsa] 
rewriterule ^/-(.*)-(.*)$ $2?sessionid=$1 [l,r,qsa] 
</virtualhost> 

  這些重寫的規(guī)則實現(xiàn)了上面兩個url重寫的要求。 

結(jié)論 
  通過使用變量結(jié)合與apache的重寫功能,交叉域名cookie可以以一種簡單的方式實現(xiàn)。想要維護這樣的 
系統(tǒng),無論什么時候鏈接交叉域名,在使用域名變量之外,什么也不用作了!在域名內(nèi)部的鏈接不需要進行 
修改,因為cookie會工作正常。 

  如果你有興趣看一下在生產(chǎn)網(wǎng)絡(luò)中實際運作中的系統(tǒng),請參觀http://www.familyhealth.com.au/。在 
一些交叉域名鏈接上移動你的鼠標,并且看一下當你點擊后它們是如何被重寫的。 

  也許,使用這個技術(shù)唯一的問題就是無法刪除在用戶瀏覽器中的全部域名下的cookie。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石家庄市| 南江县| 正定县| 武定县| 盖州市| 郴州市| 龙海市| 潍坊市| 营口市| 玉树县| 临桂县| 玉林市| 台北市| 集安市| 新巴尔虎右旗| 广州市| 镇康县| 堆龙德庆县| 繁峙县| 加查县| 武义县| 崇信县| 澄江县| 红原县| 香格里拉县| 新龙县| 垣曲县| 通城县| 白河县| 兴海县| 景洪市| 吉安县| 武义县| 尼玛县| 汪清县| 澄城县| 宁武县| 体育| 栾城县| 隆化县| 大连市|