我有一个网站。人们可以在这里登录
sub.domain.com
如果他们在这里登录,会话将完成其工作,用户将登录。在sub.domain.com的任何页面上,会返回会话值,以便它可以正常工作。
但也可以从www.sub.domain.com与网站联系。当用户在sub.domain.com上登录时,会话值在www.sub.domain.com处为空。 我的意思是如果用户登录sub.domain.com, 当他导航到www.sub.domain.com时,网站会说“请登录”,但是用户已经登录了没有“www”的网站。 希望一切都清楚,谢谢。
答案 0 :(得分:3)
在主要脚本的顶部添加在session_start之前。
ini_set('session.cookie_domain', '.domain.com' );
如果您在启用了suhosin的情况下运行PHP,请尝试禁用此设置
ini_set("suhosin.session.cryptdocroot", "Off");
ini_set("suhosin.cookie.cryptdocroot", "Off");
感谢@RandomDave
您可以从$ _SERVER ['HTTP_HOST']动态确定域名,这样您就不必对域名进行硬编码
ini_set('session.cookie_domain', strtolower(substr($_SERVER['HTTP_HOST'], 0, 4)) == 'www.' ? substr($_SERVER['HTTP_HOST'], 3) : '.'.$_SERVER['HTTP_HOST'] );
答案 1 :(得分:0)
为您的会话设置cookie_domain。
ini_set('session.cookie_domain', '.domain.com' );
或者在php.ini
。
答案 2 :(得分:0)
如果您正在浏览将要设置cookie的www.
,则PHP会话使用cookie来存储会话标识符。
您可以通过设置以点为前缀的会话cookie域来缓解此问题,该点基本上用作*.domain.com
的{{1}}通配符。您可以使用.domain.com
执行此操作:
session_set_cookie_params
更安全的示例将使用session_set_cookie_params(0, '/', '.domain.com');
并重新传回其他值。更好的是,您可以修改服务器上的session_get_cookie_params
以将php.ini
值设置为{{ 1}}(你也可以使用session.cookie_domain
)。
答案 3 :(得分:0)
您还可以在网站的根目录添加.htaccess
,例如
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^sub\.domain\.com
RewriteRule ^(.*)$ http://www.sub.domain.com$1 [R=permanent,L]