PHP的session_start()是幂等的吗?

时间:2012-02-11 13:10:05

标签: php session

上面说的是什么。不出所料,我找不到明确的答案。

我只是想知道在脚本中多次调用它会导致问题。

3 个答案:

答案 0 :(得分:3)

引用the manual

  

从PHP 4.3.3开始,在会话结束后调用session_start()   之前启动将导致级别E_NOTICE的错误。   
另外,第二次会议的开始将被忽略。

所以,它不会做太多 - 除了提出通知,这表明存在某种问题;这意味着你不应该多次调用这个函数。


编辑@hakre的评论后:为了确保,我已经测试了以下部分代码,在确认错误和通知后获取两次调用session_start()报道:

<?php
ini_set('display_errors', 'on');
error_reporting(E_ALL | E_STRICT);

session_start();
session_start();

我收到以下通知:

Notice: A session had already been started - ignoring session_start() in /.../temp.php on line 6

答案 1 :(得分:0)

不,session_start不是幂等的,它在语言的运行时状态中具有依赖性。

您通常可以多次调用它,这可能会给您一些警告或错误,但是,如果您在调用之间更改会话状态和/或配置,则该函数的行为将不会相同。 / p>

当调用函数改变会话状态时,通过对幂等的非常严格的视图,它完全不是。

此外,重要的是要注意,与$_SESSION对应的该函数的结果仍然由关联的商店,会话名称和会话ID定义。

答案 2 :(得分:0)

会导致错误(会话已经开始)。

但是如果你忽略这个错误,它就是幂等的。

在PHP 5.4中,我们将获得:     http://nl3.php.net/manual/en/function.session-status.php