2013-02-25 61 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