【发布时间】:2012-02-11 13:10:05
【问题描述】:
上面说的。不出所料,我找不到明确的答案。
我只是想知道在脚本中多次调用它是否会导致问题。
【问题讨论】:
-
+1 教我一个新词。 en.wikipedia.org/wiki/Idempotence
-
-1 使用错误的网站来教别人新词。并且在提出问题/也没有阅读文档页面之前甚至没有运行一个简单的测试。
上面说的。不出所料,我找不到明确的答案。
我只是想知道在脚本中多次调用它是否会导致问题。
【问题讨论】:
引用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
【讨论】:
session_start(),我确实收到了我所期待的通知。 (在 PHP 5.3.6 上测试)
不,session_start 不是幂等的,它在语言的运行时状态中有依赖关系。
您通常可以多次调用它,这可能会给您一些警告或错误而没有太大区别,但是,如果您在调用之间更改会话状态和/或配置,则该函数的行为将不同。
由于调用函数会改变会话状态,从非常严格的幂等观点来看,它完全不是。
此外,需要注意的是,与$_SESSION 对应的该函数的结果仍然由关联的存储、会话名称和会话 ID 定义。
【讨论】:
这会导致错误(会话已经开始)。
但是如果你忽略这个错误,它就会是幂等的。
在 PHP 5.4 中,我们将获得: http://nl3.php.net/manual/en/function.session-status.php
【讨论】: