我在同一台服务器上有几个网站,其中包含以下域名,其中PHP会话域设置为' .example.com'所以cookie在两个网站之间共享:
我还有一个单独的服务器,其中包含以下域admin.example.com
,并希望它使用自己的会话/ cookie。但是当有.example.com
Cookie时,admin.example.com
网站会尝试使用该值代替其.admin.example.com
Cookie值,从而导致会话问题......
如果我要删除.example.com
Cookie,则网站会使用正确的.admin.earlowen.com
值按预期工作。
我已将session.cookie_domain
设为.admin.example.com
无效。我错过了什么吗?或者是不可能的。
答案 0 :(得分:1)
由于它们共享同一个域,因此它们是同一个站点并共享会话。
您可以使用管理部分中的session_name手动覆盖此内容。
这样的事情:
<?php
//this forces the admin page to recognize a different cookie as it's session id
session_name('PHPADMINSESSID');
//start the session normally
session_start();
还有一些其他棘手的方法可以做到这一点,但你通常应该避免使用棘手的,因为你很容易忘记你做了什么而后来无法弄明白。我会解释其中的一些作为参考:
如果可以使用双子域,则会更改预期的主机名,并且会导致两个不同的固有会话。例如,subdomain.example.com
和example.com
将共享会话,但subdomain.username.example.com
和example.com
将不会,并将使用单独的会话。你应该避免这种情况,因为如果你决定实施一些后端逻辑来管理会话并期望它们被共享,那么这将很难解决。
您还可以使用session_id强制执行不同的会话,但这需要您手动跟踪ID并且会非常复杂,并且还需要您设置某种数据存储以跟踪哪些会话会进行什么,这会增加很多不必要的开销。
最简单的方法是为每个会话使用不同的session_name
值。