作者:Christopher Kings-Lynne 翻譯:limodou Cookie真是一個偉大的發明,它允許web開發者保留他們的用戶的登錄狀態。然而,當你的站點或網絡 有一個以上的域名時就會出現問題了。 在Cookie規范上說,一個cookie只能用於一個域名,不能夠發給其它的域名。因此,如果在浏覽器中對 一個域名設置了一個cookie,這個cookie對於其它的域名將無效。如果你想讓你的用戶從你的站點中的其中 一個進行登錄,同時也可以在其它域名上進行登錄,這可真是一個大難題。 我的解決方案將使用下面的一般框架: 一個預置的腳本將用來接受通過GET或COOKIE方式傳遞過來的sessionid號。它將比COOKIE優先選擇GET 變量。所以,無論何時需要引用交叉的域名時,我們把sessionid做為一個URL參數進行發送。 修改Apache配置,用來實現重寫所有的交叉域名的cookie。這樣做的原因一會兒就會清楚了。 在任何時候出現一個交叉域名引用時使用變量。 第一步:創建預置腳本 將下面的代碼加到預置腳本中(或出現在所有腳本之前的函數中)。 一旦這個代碼運行之後,一個全局的sessionid變量將可以用於腳本。它將保存著用戶的cookie中的 sessionid值,或者是通過GET請求發來的sessionid值。 第二步:為所有的交叉域名引用使用變量 創建一個全局的配置文件,用於存放可以進行切換的域名的基本引用形式。例如,如果我們擁有 domain1.com和domain2.com,則如下設置: 現在,如果在代碼中如下做: 你將產生如下的輸出: Click here to contact us. 在這裡sessionid已經被插入到URL中去了。 在這個地方,你可能會想"這樣可能會在web服務器上打開名為橫線,sessionid,橫線的子目錄?!?!?"。 然而,下面的步驟將提供一個必需的戲法,以便讓它能夠使用! 第三步:配置Apache 現在,剩下的步驟就是配置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 為了實現它,簡單地配置兩個虛擬服務器,作為domain1和domain2,如下操作: