PHP如何正确检测已存在的旧会话 现有代码始终提示新会话怎么办
PHP会话存在性检测的问题修复方案
错误原因
你的代码逻辑存在顺序问题:
- 未调用
session_start()时,session_status()的返回值永远是PHP_SESSION_NONE,所以每次请求都会进入新建会话的分支 session_start()本身会自动检测请求携带的会话cookie,如果存在有效ID就复用旧会话,你没有在启动会话后判断是否为首次创建,才会出现提示新建但会话ID是旧值的矛盾
正确实现代码
<?php // 先启动会话,PHP自动处理旧会话复用逻辑 session_start(); // 通过自定义的初始化标记判断是否为新创建的会话 if (!isset($_SESSION['init_flag'])) { // 首次创建会话时写入标记和会话ID $_SESSION['init_flag'] = true; $_SESSION['session_id'] = session_id(); echo "New session..... " . $_SESSION['session_id'] . "<BR>"; } else { echo "Old session..... " . $_SESSION['session_id'] . "<BR>"; } ?>
补充说明
- PHP 7.1及以上版本也可以通过
session_start()的返回状态结合$_SESSION的空值判断是否为本次请求新建的会话 - 没有特殊需求不要在
session_start()前用session_status()判断是否启动会话,会跳过默认的旧会话复用逻辑
内容的提问来源于stack exchange,提问作者Amer Hamid
相关产品推荐
相关产品推荐

