我刚刚将我的应用程序从本地 WAMP 迁移到实际的在线服务器。这导致了 session ID 未按显示保存的问题。
- 我已检查在 session_start 之前是否输出了不需要的字符
- 我似乎找不到任何保存在我的/tmp 中的 session 文件
这些是我的 session 设置:
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
- 在线服务器正在运行:PHP 版本 5.3.9,而 WAMP 是:PHP 版本 5.3.5。
- 通过查看发送的 header 和每次加载页面时的响应,我得到以下信息,set-cookie 发送了适当的 session ID,收到的响应发送了一个新的 session ID,就好像没有请求任何内容一样。
- 我在预览 URL 上运行网站(启用 SSL)。我不知道这是否与此有关,我的域尚未注册。
错误代码很简单:
$sId = session_id();
if ($sId == '') { session_start(); }
最佳答案
我刚刚遇到并解决了完全相同的问题。
事实证明,cookie PHPSESSID(保存 session 记录)已发送但被服务器忽略,因此 session 未维护,每次页面重新加载或更改时服务器都会重新启动 session 。
问题是我的 wp-config.php 这一行:
@ini_set('session.cookie_secure','On');
这意味着如果连接不安全,每个 cookie 都将被忽略,因此服务器将重新启动 PHPSESSID cookie 和 session 。
检查您的 wp-config.php 或您的 init.php。是 cookie 的问题。
关于PHP session ID 随每个请求而变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306713/