0

我有一个网站。人们可以在这里登录

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”的网站上登录。希望一切都清楚,谢谢。

4

4 回答 4

3

在 session_start 之前的顶部添加主脚本。

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

如果您在启用 suhosin 的情况下运行 PHP,请尝试禁用那里的设置

  ini_set("suhosin.session.cryptdocroot", "Off");
  ini_set("suhosin.cookie.cryptdocroot", "Off");

PHP 错误跟踪器

感谢@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'] );
于 2012-06-06T10:59:43.470 回答
0

为您的会话设置 cookie_domain。

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

或者在您的php.ini.

于 2012-06-06T11:00:13.850 回答
0

PHP Sessions 使用 cookie 来存储会话标识符,如果您正在浏览www.它,则将设置 cookie。

您可以通过设置以点为前缀的会话 cookie 域来缓解此问题,该点本质上将充当*.domain.com使用.domain.com. 你这样做session_set_cookie_params是这样的:

session_set_cookie_params(0, '/', '.domain.com');

一个更安全的例子是使用session_get_cookie_params并重新传递其他值。更好的是,您可以修改php.ini服务器上的session.cookie_domain值以将值设置为.domain.com(您也可以ini_set用于此)。

于 2012-06-06T11:01:18.577 回答
0

您还可以.htaccess在网站的根目录添加一个

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^sub\.domain\.com
RewriteRule ^(.*)$ http://www.sub.domain.com$1 [R=permanent,L]
于 2012-06-06T11:06:59.050 回答