session_id()行为

时间:2012-08-16 17:53:30

标签: php session sessionid

由于各种原因,我一直致力于将我的网站会话信息从平面文件转换为数据库会话,主要原因是我在“管理”面板和用户面板上使用了相同的用户数据库。

管理小组设置在我们主域的子域中,即

domain.com staff.domain.com

两个域都使用完全相同的会话处理程序,但是当涉及在子域和普通域上实际创建会话时,会为同一台计算机/人创建两个不同的session_id。

这种行为是正常的吗?有没有办法让我这样做,所以登录用户面板也可以让我在没有登录的情况下使用人员面板,因为会话已经创建了?

谢谢

4 个答案:

答案 0 :(得分:2)

您可以在PHP脚本中设置:

ini_set('session.cookie_domain', '.domain.tld');

为了在子域之间共享会话。

将会话存储到DB中的事实不应该直接与此功能有关,因为我假设您正在使用类来包装会话读/写功能,这要归功于session_set_save_handler。< / p>

答案 1 :(得分:1)

我假设您正在使用Cookie来传输会话ID。 cookie不会传递到网站的其他部分,因为它位于不同的(子)域。 PHP之前生成一个新的会话ID。

但是,如果您管理这两个部分具有相同的会话名称并且您设法传递会话ID,那么一切都应该正常工作。

例如,您可以创建一个特殊的脚本,将会话ID作为参数接受,然后接管该会话数据。

但请注意这一点,这样就不会轻易被误用来窃取会话。因此,使用适用于两个站点的cookie可能是一个更简单的解决方案。

答案 2 :(得分:1)

在每种情况下,您需要调用session_set_cookie_params并在开始会话之前适当地设置会话cookie的域。文档准确描述了需要完成的工作。

答案 3 :(得分:0)

如果您使用Cookie存储会话ID,则需要确保使用子域通配符值设置Cookie。默认情况下,PHP使用完整的子域名和域名设置cookie(即cookie域名为“www.domain.com”)。如果您使用域名“.domain.com”设置Cookie。所有子域名都可以将cookie读取到“domain.com”。