域和子域的 PHP 会话

Posted

技术标签:

【中文标题】域和子域的 PHP 会话【英文标题】:PHP session for domain and sub domains 【发布时间】:2013-08-27 21:45:29 【问题描述】:

这是我在基于 php 的 webapp 中启动会话的代码

session_set_cookie_params(24*60*60, "/", ".exdomain.com");
session_start();

我想要的是在所有子域之间保持相同的会话说:

www.exdomain.com 
ajax.exdomain.com

这里是子域

ajax.exdomain.com

用于服务用户的ajax请求现在发生了什么,用户通过www.exdomain.com登录时 一个新的 PHPSESSID="91252ec9310ae1c80f44c7e885cf7dfe" 从萤火虫创建 PHPSESSID cookie 设置如下:

PHPSESSID=91252ec9310ae1c80f44c7e885cf7dfe | .exdomain.com | 41乙| / | 2013 年 8 月 29 日上午 03:02:09

现在,当通过 ajax 子域(即 ajax.exdomain.com)发出请求时,正在为此请求创建一个新会话,实际上为每个 ajax 请求创建一个新的 PHPSESSID。 如何防止ajax请求新会话的形成。

【问题讨论】:

您是否为两个子域配置了相同的session_set_cookie_params()?换句话说,ajax.exdomain.com 是否知道也使用.exdomain.com 作为会话 cookie 的域? 两者都使用相同的文件/功能进行登录验证/会话管理。 检查this question它可能对你有帮助。 【参考方案1】:

您需要在.htaccess 或php.ini 中设置会话域

php_value session.cookie_domain ".exdomain.com"

【讨论】:

以上是关于域和子域的 PHP 会话的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security 中的子域之间共享会话

如何使用子域和 AJAX 使 PHP 会话工作?

无法使用 Laravel 4 与子域共享会话

当 Rails 中的同一域上存在会话时,如何在 PHP 中创建会话?

Laravel 多域会话

跨子域访问会话(Rails 4)