<?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'];
}
?>
一旦這個(gè)代碼運(yùn)行之后,一個(gè)全局的'sessionid'變量將可以用于腳本。它將保存著用戶的cookie中的
sessionid值,或者是通過GET請(qǐng)求發(fā)來(lái)的sessionid值。
第二步:為所有的交叉域名引用使用變量
創(chuàng)建一個(gè)全局的配置文件,用于存放可以進(jìn)行切換的域名的基本引用形式。例如,如果我們擁有
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中去了。
在這個(gè)地方,你可能會(huì)想"這樣可能會(huì)在web服務(wù)器上打開名為橫線,sessionid,橫線的子目錄?!?!?"。
然而,下面的步驟將提供一個(gè)必需的戲法,以便讓它能夠使用!
第三步:配置Apache
現(xiàn)在,剩下的步驟就是配置apache來(lái)重寫這個(gè)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
為了實(shí)現(xiàn)它,簡(jiǎn)單地配置兩個(gè)虛擬服務(wù)器,作為domain1和domain2,如下操作:
<VirtualHost ipaddress>
DocumentRoot /usr/local/www/domain1
ServerName www.domain1.com
RewriteEngine on
RewriteRule ^/-(.*)-(.*?.*)$ &sessionid= [L,R,QSA]
RewriteRule ^/-(.*)-(.*)$ ?sessionid= [L,R,QSA]
</VirtualHost>
<VirtualHost ipaddress>
DocumentRoot /usr/local/www/domain2
ServerName www.domain2.com
RewriteEngine on
RewriteRule ^/-(.*)-(.*?.*)$ &sessionid= [L,R,QSA]
RewriteRule ^/-(.*)-(.*)$ ?sessionid= [L,R,QSA]
</VirtualHost>
這些重寫的規(guī)則實(shí)現(xiàn)了上面兩個(gè)URL重寫的要求。
結(jié)論
通過使用變量結(jié)合與apache的重寫功能,交叉域名cookie可以以一種簡(jiǎn)單的方式實(shí)現(xiàn)。想要維護(hù)這樣的
系統(tǒng),無(wú)論什么時(shí)候鏈接交叉域名,在使用域名變量之外,什么也不用作了!在域名內(nèi)部的鏈接不需要進(jìn)行
修改,因?yàn)閏ookie會(huì)工作正常。
如果你有興趣看一下在生產(chǎn)網(wǎng)絡(luò)中實(shí)際運(yùn)作中的系統(tǒng),請(qǐng)參觀http://www.familyhealth.com.au/。在
一些交叉域名鏈接上移動(dòng)你的鼠標(biāo),并且看一下當(dāng)你點(diǎn)擊后它們是如何被重寫的。
也許,使用這個(gè)技術(shù)唯一的問題就是無(wú)法刪除在用戶瀏覽器中的全部域名下的cookie。
新聞熱點(diǎn)
疑難解答
網(wǎng)友關(guān)注