会话变量没有从http://www.xxxx.com转到http://xxxx.com

时间:2010-07-01 00:26:56

标签: php session

我的网站上的一些用户意识到了这个问题。许多用户进入他们的浏览器http://xxxx.com然后登录。然后他们可以点击链接,将他们带到http://www.xxxx.com它要求他们再次登录!这是一个任何人以前遇到过的已知问题吗?我尝试使用Google搜索,但我不确定我是否使用了错误的关键字,或者是因为我找不到与此相关的任何内容。

谢谢, 伊恩麦卡洛

4 个答案:

答案 0 :(得分:5)

就您的浏览器而言,www.xxxx.com和xxxx.com是不同的域名。同源策略阻止跨域访问cookie。

但是,浏览器知道子域,子域可以访问父域的cookie。因此,如果您想让xxxx.com和www.xxxx.com都能访问您的cookie,只需在.xxxx.com上设置您的cookie即可。

答案 1 :(得分:0)

检查cookie的域,在创建cookie时,您可以指定它是否适用于所有子域,根服务器,特定子域等。要处理所有cookie,cookie将用于.example.com

答案 2 :(得分:0)

设置Cookie时,您可以选择指定Cookie的设置域。如果不这样做,则cookie仅限于该主机名,因此如果cookie在www.example.com上设置,则只会由该主机名或更低版本的浏览器返回。

如果在设置Cookie时将域设置为“example.com”,则它也应该在“www.example.com”上运行。

问题是更具体的cookie会覆盖不太具体的cookie,所以如果您之前在“www.example.com”上设置了cookie,它将继续覆盖“example.com”的新设置而不是被它取代 - 你首先必须删除“www.example.com”的一套。这很棘手,因为当客户端将cookie返回给服务器时,它没有说明cookie的设置名称是什么。

答案 3 :(得分:0)

人们似乎在假设您正在使用cookie来执行身份验证,但正在跳过看似根本问题的内容。特雷弗简单地谈到了它,但仍然坚持饼干的概念。就http而言,www.xxxx.com和xxxx.com是同一顶级域名上的不同子域名。因此,虽然它们可能是相同的IP,相同的网站,相同的一切,浏览器请求和服务器的响应被认为是2个独立的域/站点。除非您具有分离的会话状态(例如SQL会话存储等),否则不会跨子域共享会话。

但是,如果您使用cookie进行身份验证,则可以添加cookie检查并在cookie中的数据有效(并且足以重建会话)时重建新会话。否则,您必须将会话状态从进程分离到数据存储中。

相关问题