仅在首尾页面调用session_start(),PHP会话经中间页面是否会丢失?
PHP会话在未调用session_start()的页面中是否会丢失?
会话不会丢失,具体原因如下:
- PHP会话的核心是服务器端存储的会话数据,以及客户端浏览器保存的
PHPSESSIDCookie(默认机制)。用户访问page1.php时,session_start()会初始化会话,同时让浏览器保存会话ID Cookie。 - 用户提交POST请求到page2.php时,浏览器会自动携带
PHPSESSIDCookie,但page2.php只是没调用session_start()去读取会话数据而已——服务器端的会话数据依然完好保存在存储介质(比如服务器的会话文件、数据库)里,不会因为某个页面没启动会话就被删除。 - 当page2.php重定向到page1.php或page3.php时,这两个页面调用
session_start()会通过浏览器传来的PHPSESSID定位到对应的服务器会话数据,会话状态会正常恢复。
只有以下几种情况才会导致会话丢失:
- 服务器端主动执行
session_destroy()销毁会话 - 会话达到配置的过期时间(比如
session.gc_maxlifetime设置的时长) - 客户端浏览器丢失了
PHPSESSIDCookie(比如清除Cookie、禁用Cookie)
内容的提问来源于stack exchange,提问作者Mark Goldfain
相关产品推荐
相关产品推荐

