session_id()和session_start()的PHP逻辑

Jas*_*ary 9 php session

我继承了以下有趣的代码.逻辑似乎是多余的或者是对错的.

// make the use of sessions possible.
if (!session_id()) {
    session_start();
}
Run Code Online (Sandbox Code Playgroud)

但是,它是在大规模用户系统上,我不愿意改变它.虽然有经验的PHP,但我会很感激社区的投入,以确保我不会错过任何东西.

如果您可以提及当前代码的副作用或洞察力,则可获得奖励积分.

UPDATE

也许逻辑不是正确的词.为什么session_id()在调用之前检查session_start(),何时它总是返回空字符串,因为没有session_start()调用代码中的其他位置.

Tim*_*mur 13

需要此代码来检查会话是否已启动.如果会话已启动,则无需再次初始化它.此外,尝试在会话已初始化时调用session_start()将导致E_NOTICE错误.


afu*_*ama 5

望着PHP.net:
http://php.net/manual/en/function.session-id.php

session_id() 返回当前会话的会话 ID,如果没有当前会话(不存在当前会话 ID),则返回空字符串 ("")。

如果您要在不进行太多更改的情况下更新代码,最好这样编写:

if (session_id() === "") {
   session_start();
}
Run Code Online (Sandbox Code Playgroud)

检查会话是否真的开始了。如果对 php.net 文档进行评论和引用,则可以更清楚地了解开发人员正在尝试完成的工作。

请注意,同时:

$test = ""
!$test // This returns true    
Run Code Online (Sandbox Code Playgroud)

它不是那么清楚。