0

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

管理面板设置在我们主域的子域上,即;

domain.com 员工.domain.com

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

这种行为正常吗?有没有办法让我登录用户面板也允许我在不登录的情况下使用人员面板,因为会话已经创建?

谢谢

4

4 回答 4

2

从您的 PHP 脚本中,您可以设置:

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

为了跨子域共享会话。

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

于 2012-08-16T17:57:56.157 回答
1

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

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

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

但是在这里要小心,这样就不会轻易被滥用来窃取会话。因此,可能使用适用于两个站点的 cookie 可能是一个更简单的解决方案。

于 2012-08-16T17:57:28.713 回答
1

在每种情况下开始会话之前,您需要session_set_cookie_params适当地调用和设置会话 cookie 的域。该文档准确地描述了需要做什么。

于 2012-08-16T17:57:40.213 回答
0

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

于 2012-08-16T18:00:03.273 回答