PHPSESSID未保存到cookie

时间:2012-04-21 00:48:41

标签: php session cookies

保存会话ID的PHPSESSID变量未保存到客户端cookie中。 这会导致每次调用session_start()函数时都会生成一个新的会话ID。

当我使用FireFox,Opera和Chrome时,情况确实如此。有了safari,由于某种原因,这个变量被成功保存到cookie中,一切正常。

编辑:以下是我phpinfo()的会话设置:

session settings via phpinfo

我的网站有一个子域名,我想在所有子域名中使用相同的会话记录。

第二次编辑: 当我在我的主域名上检查var_dump($_COOKIE);时,我会在名称PHPSESSID下获得会话ID,但是当我在子域名上执行此操作时,我会得到一个空的array()

3 个答案:

答案 0 :(得分:3)

看起来Cookie的域名设置为localhost。这仅适用于您实际运行localhost网站的情况。您需要session.cookie_domain与您的域名匹配,可选择在其前面加.(如.example.com所示),以包含子域名。

答案 1 :(得分:0)

它不用于Yoav的情况,但可能用于其他有类似问题的人:

不要忘记调用session_start()

听起来像session_start()会创建PHPSESSID并将其保存在cookie中,如果它不是从客户端cookie发送的。

来自php.net

  

当访问者访问您的站点时,PHP将自动检查(如果session.auto_start设置为1)或您的请求(显式通过session_start())是否已随请求发送特定会话ID。如果是这种情况,则重新创建先前保存的环境。

关于session_start()http://php.net/manual/en/function.session-start.php

的一些很好的例子

答案 2 :(得分:0)

我也发生了同样的事情,我无法使用Safari和Mac Os浏览器(甚至是Firefox)也无法登录我的用户,只能通过Chrome浏览器(不是Mac)登录。原来是

在php.ini中的组合
  1. session.cookie_lifetime=0
  2. session.cookie_domain=mydomain

如Shea所说,在0处我更改为3600(合理),“ mydomain”是我的错(都是我的错),因为它缺少域的正确名称“ .com”!

所以我最终将配置更改为

  1. session.cookie_lifetime=3600
  2. session.cookie_domain=mydomain.com