为什么要测试以查看会话是否已经开始

时间:2018-07-30 20:15:37

标签: php session

这来自official php manual

  

session_start()创建一个会话,或基于通过GET或POST请求传递或通过cookie传递的会话标识符恢复当前会话。

我在所有阅读过的php编程书籍中都看到了代码,这些代码以以下内容开始了代码页面:

<?php
session_start();
?>

但是我在这里看到了一些帖子,开发人员正在检查这些帖子以查看会话是否已经开始。

if (session_id() == '') {
    session_start();
}

该手册似乎建议session_start()为您进行检查,如果未启动,则它将自己启动。

那么,谁是正确的?

2 个答案:

答案 0 :(得分:4)

这是因为您不能在同一脚本上多次调用sesseion_start()

让我们假设我们有一个脚本index.php,女巫包括了另一个脚本frontController.php并且都具有会话开始

如果您不验证并尝试启动另一个会话,PHP会发出如下通知:

A session had already been started - ignoring session_start() in frontController.php:80

答案 1 :(得分:0)

因为您不能两次启动会话:

session_start();
session_start();
  

注意:session_start():会话已经开始-忽略

当文档说 session_start()创建会话或恢复当前会话时,这隐含着无法创建或恢复已经启动的会话。

这可能是设计混乱的迹象,也可能是防御性编码方法,可能无法启用session.auto_start

我尤其从来不这样做。如果不确定session.auto_start,则只需在应用程序级别禁用指令即可。