【发布时间】:2021-08-05 21:29:22
【问题描述】:
我已经看到this identical opposite 问题,它的 OP 代码示例对我来说似乎非常好。我还阅读了(包括 PHP 文档)可以在 PHP >= 5.4 上使用 session_status() 检查会话,在调用 session_start() 以确定它是否已经存在之前这样做应该没问题。
现在,我在 CentOS 7.10 机器上使用 PHP 5.4.16,session_status() 总是为我返回 1 (PHP_SESSION_NONE),只有当我用这个示例重新加载页面时:
<?php
$status = session_status();
session_start();
echo "The session status is : $status";
我希望它在我重新加载页面时返回PHP_SESSION_ACTIVE (2)(并且我不会在清除缓存的情况下强制重新加载)。我正在使用最新的 Chrome 版本,并且该页面嵌入在具有 HTTPS 端口 8443 的虚拟主机中。
我已经使用php --version 和phpinfo() 脚本检查了PHP 版本以丢弃任何版本冲突以防万一,它们是相同的。此外,当我访问会话脚本页面时,服务器会在 /var/lib/php/session 目录中创建空文件。我没有更改会话或任何东西的默认 PHP 设置。
明确一点:session_status() 工作正常,如果在相同的脚本执行 (The session status is : 2) 之后检查,但我自然对此不感兴趣,因为我想首先检查会话是否存在。
可能出了什么问题?
【问题讨论】:
-
所以你说当你重新加载你的会话丢失了??
-
危险:PHP 5.4 一直不受支持,并且已经有五年多没有得到安全更新了。 5.4.16 来自 2013 年 5 月和packed with vulnerabilities。尽快升级吧!
-
PHP_SESSION_NONE if sessions are enabled, but none exists.来自文档,对我来说,我可能错了,您的配置启用了会话,因此您没有得到0 (PHP_SESSION_DISABLED),但您的会话尚未开始。所以你会得到一个PHP_SESSION_NONE作为结果。 -
您在开始会话之前获取状态。为什么在那一点上除了“无”之外什么都不是?该函数为您提供当前请求的当前状态。