6

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

当我使用 FireFox、Opera 和 Chrome 时,这是真的。在 safari 中,由于某种原因,此变量已成功保存到 cookie 中,并且一切正常。

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

通过 phpinfo 设置会话

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

第二次编辑: 当我检查var_dump($_COOKIE);我的主域时,我得到了名称下的会话 ID,PHPSESSID但是当我在子域上这样做时,我得到一个空的array().

4

3 回答 3

3

看起来 cookie 的域被设置为localhost. 这仅在您实际运行您的网站时才有效localhost。您需要session.cookie_domain匹配您的域名,可选地.在它前面加上一个(如.example.com)以包含子域。

于 2012-04-22T02:05:28.077 回答
1

它不适用于 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

于 2017-06-15T15:02:46.493 回答
0

同样的事情发生在我身上,我无法在 Safari 和 Mac Os 浏览器中登录我的用户,甚至无法登录 Firefox,只能在 Chrome(PC,而不是 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
于 2020-06-10T15:38:44.697 回答