我的网站上的一些用户意识到了这个问题。许多用户进入他们的浏览器http://xxxx.com然后登录。然后他们可以点击链接,将他们带到http://www.xxxx.com它要求他们再次登录!这是一个任何人以前遇到过的已知问题吗?我尝试使用Google搜索,但我不确定我是否使用了错误的关键字,或者是因为我找不到与此相关的任何内容。
谢谢, 伊恩麦卡洛
答案 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中的数据有效(并且足以重建会话)时重建新会话。否则,您必须将会话状态从进程分离到数据存储中。