保存会话ID的PHPSESSID变量未保存到客户端cookie中。
这会导致每次调用session_start()
函数时都会生成一个新的会话ID。
当我使用FireFox,Opera和Chrome时,情况确实如此。有了safari,由于某种原因,这个变量被成功保存到cookie中,一切正常。
编辑:以下是我phpinfo()
的会话设置:
我的网站有一个子域名,我想在所有子域名中使用相同的会话记录。
第二次编辑:
当我在我的主域名上检查var_dump($_COOKIE);
时,我会在名称PHPSESSID
下获得会话ID,但是当我在子域名上执行此操作时,我会得到一个空的array()
。
答案 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中的组合session.cookie_lifetime=0
session.cookie_domain=mydomain
如Shea所说,在0处我更改为3600(合理),“ mydomain”是我的错(都是我的错),因为它缺少域的正确名称“ .com”!
所以我最终将配置更改为
session.cookie_lifetime=3600
session.cookie_domain=mydomain.com