2013-02-25 110 views
0

我正在嘗試處理兩個PHPSESSID cocokies。一個使用www子目錄 - 所以www.mydomain.com - 而另一個使用.mydomain.com。處理兩個PHP會話cookie?

現在,腳本可以設置cookie域,但是如果在訪問mydomain.com之前在www子域中運行了另一個腳本,則該cookie將設置爲www.mydomain.com。然後,如果我訪問mydomain.com,則設置.mydomain.com的Cookie。這意味着我可以結束兩個PHPSESSID cookie。

有沒有辦法確定我在這種情況下處理哪個cookie?

我看了另一篇文章,但並沒有帶來任何結論。

How to handle multiple cookies with the same name?

回答

0

爲什麼不只是改變在php.ini會話cookie的名字嗎?

session.name = WHATEVER_YOU_LIKE 
+0

由於正在使用的腳本設置了session.name,可以使用或不使用www子域來訪問它。在這個例子中我給了PHPSESSID,因爲我覺得它更容易理解問題的本質。 – Andre 2013-02-25 20:48:43

0

把這個放在運行的第一個php文件的頂部,比如index.php或config.php文件..在會話開始之前。

<?php 

if(stripos($_SERVER['HTTP_HOST'],'www')===false) { 
    ini_set('session.cookie_domain', 'site.com'); 
} else { 
    ini_set('session.cookie_domain', 'www.site.com'); 
} 

?> 

這將導致只被1個或另一個域相關聯,這意味着用戶可以有2塊餅乾名爲PHPSESSID該cookie。

+0

類似的代碼已經到位。 //如果訪問站點缺少www目錄快捷方式。 \t \t //嘗試設置Cookie域。 \t \t如果(($ CNT = substr_count($主機= HTTP :: Request()方法 - >和getHost()))== 1 ' '){ \t \t \t $這 - > _配置[' 會話'] ['option'] ['cookie_domain'] = $ host; \t \t} ELSEIF($ CNT == 2 &&的preg_match( '/^WWW [1-4]?\。(。*)$ /',$主機,$匹配)){ \t \t \t $這 - > _config ['session'] ['option'] ['cookie_domain'] = $ matches [1]; \t \t} – Andre 2013-02-26 15:55:36