我有一个网站www.example.com。这将有多个子域,可以与单个应用程序或程序一起使用。例如,login.example.com将允许用户登录该站点,而system.example.com将允许用户访问信息系统,而forums.example.com将允许用户访问论坛。
我们可能需要在子域之间传递信息,例如用户ID或用户首选项等。我们如何使用SESSION变量在sudomains之间传递信息?
编辑: 我喜欢这个想法:
作为脚本中的第一件事:
ini_set('session.cookie_domain', '.example.com' );
答案 0 :(得分:13)
PHP会话ID保存在Cookies中。 要在所有子域中提供Cookie,您需要将其分配到根域。然后所有子域都将从cookie获取会话ID,PHP可以使用传递的会话ID找到会话。
事实证明,您只需要将session.cookie_domain
设置为php.ini
文件中的根域
session.cookie_domain = ".example.com"
同时检查manual以了解用于设置ini条目的不同方法。
答案 1 :(得分:9)
1)子域应使用相同的路径来保存会话文件
2)修改你的
php.ini session.cookie_domain = ".example.com"
或.htaccess php_value session.cookie_domain .example.com
或脚本ini_set('session.cookie_domain', '.example.com' );
答案 2 :(得分:9)
我找到了解决问题的方法:
session_name("2620368ghwahw90w");
session_set_cookie_params(0, '/', '.mydomain.com');
session_start();
这似乎没有问题。这是一种安全风险低的好方法吗?
答案 3 :(得分:3)
在php文件中创建会话之前,请在第一行添加此行:
<?php
//session cross to sub domain
ini_set('session.cookie_domain', substr($_SERVER['SERVER_NAME'],strpos($_SERVER['SERVER_NAME'],"."),100));
答案 4 :(得分:2)
你可以使用cookies。检查setcookie()中的path
参数,该参数使该Cookie可用于整个域。缺点是关闭cookie的人(私人浏览模式)
另一种方法是passing the sessionID around using links或隐藏<input>
字段(表单)。
因为单独的网站不共享会话(据我所知,因为子域在技术上是彼此不同的地方),所以不要使用会话存储在服务器端。相反,使用数据库来处理您的会话。这样,多个站点可以共享同一个会话跟踪表。
答案 5 :(得分:0)
要在子域之间共享会话cookie,您必须将cookie的域设置为.example.org
(请注意点)。
http://www.php.net/manual/en/session.configuration.php#ini.session.cookie-domain
答案 6 :(得分:0)
我已经使用了一段时间了,现在对我有用的是下面的代码:
session_name("some_session_name");
session_set_cookie_params(0, '/', '.some_domain.com');
session_start();
将使用会话变量的所有子域。我在我的索引php文件的开头设置它,它的工作原理。希望这会说清楚。
答案 7 :(得分:0)
像魅力一样工作!
我认为最干净的方法是在.env中创建变量SESSION_DOMAIN=.example.com
或者,您可以打开config/session.php
并设置'domain' => env('SESSION_DOMAIN', '.example.com')
,
与所有子域,例如。 domain.example.com
,test.example.com
甚至example.com
都共享同一会话