Php 相同的服务器,不同的域需要不同的会话

Php 相同的服务器,不同的域需要不同的会话,php,session,dns,subdomain,Php,Session,Dns,Subdomain,我正在为与单个数据库通信的多个域实现登录和注册-我们将它们称为I.domain-a.com和I.domain-b.com。这两个子域在DNS中都有一个指向单个服务器的记录,因此使i.domain-A.com/hello.php和i.domain-b.com/hello.php运行相同的东西 因此,如果我在域a上创建会话,那么我可以转到域B并检索相同的会话信息。为了使用我编写的相同PHP函数为它们实现完全独立的登录系统来处理注册,我是否应该基于$\u SERVER['HTTP\u HOST']使用

我正在为与单个数据库通信的多个域实现登录和注册-我们将它们称为
I.domain-a.com
I.domain-b.com
。这两个子域在DNS中都有一个指向单个服务器的记录,因此使
i.domain-A.com/hello.php
i.domain-b.com/hello.php
运行相同的东西


因此,如果我在域a上创建会话,那么我可以转到域B并检索相同的会话信息。为了使用我编写的相同PHP函数为它们实现完全独立的登录系统来处理注册,我是否应该基于
$\u SERVER['HTTP\u HOST']
使用
session\u name()?我不确定我的情况与之有多相似,希望这个问题不要太相似。

不。阻止不同用户获得相同会话的机制是基于每个服务器,而不是基于每个主机名。

会话/cookie是特定于域的,不依赖DNS设置。如果您希望两个系统的会话在各自的域上同时是分开的,那么您已经设置好了


我相信
session\u name()
实际上是解决另一个人问题的最好办法,在同一个域上进行两次单独的会话。

为了避免会话出现问题,你应该使用会话名称('myapplication')[会话名称({UNIQUE\u APP\u ID})]

您提到的问题可能发生在更简单的情况下,即网站用户有一个管理面板和一个登录表单

如果未使用会话名称,则登录用户可以访问管理员。面板但这取决于身份验证。您已实施的方案和机制


关于,

我想,除此之外,我应该问:如果对每个域使用不同的
session\u name()
不是明智的选择,那么处理这个问题的最佳方法是什么?您还可以在每个域的php应用程序的第一行设置“session.cookie\u domain”[type:string]运行时指令(init\u set())(我的答案如下,但使用了session_name()函数的调用)谢谢。我有一个调试页面,如果我在
I.domain-a.com/session.php
I.domain-a.com/session.php
之前进入
session_name($\u SERVER['HTTP_HOST']);
,我会看到同样的情况;
然后我会为每个域获得不同的ID。这是因为I.domain-a.com/session.php和I.domain-a.com/session.php是同一个页面。会话ID是特定于服务器的,而cookie是特定于域的。用户的cookie(每个域一个)将每个都指向唯一的会话ID,从而避免任何重叠。请尝试设置设置会话变量的脚本和显示该变量的脚本。从一个域运行第一个,从另一个域运行第二个,第二个域在从同一个域运行之前不应获取第一个值。如果有人手动传递会话ID到PHP脚本中,它们可以(如果您想提供此功能,您也可以)跨域传输会话的数据。为了完全防止这种情况,您可以使用会话名称()/HTTP主机组合。因此,考虑到这一点,使用
会话名称($\u SERVER['HTTP\u HOST')是否安全
会话_start();
之前将同一服务器上每个域的会话分开?我还意识到,实现上述操作会导致每次访问都生成一个新的ID,这并不理想。在会话过期或销毁之前,我希望使用相同的ID。对于如此快速的答复,我深表歉意。。。