这是设置定义会话的矫枉过正吗?


Is this overkill for setting defining SESSION

我在每个文件的顶部都有以下代码运行。我需要 if 语句吗?我已经使用这个实现很长时间了,很可能是在我第一次学习时获得的。我现在的理解是,我不需要 if 语句,但我想澄清一下这是否是一种好的做法。

<?php
// Inialize session
if (!isset($_SESSION)) {
  session_start();
}

严格来说,if确实不是必需的。但是,我想说无论如何保持if是一种很好的做法。
毕竟,isset是一种语言结构,而session_start是一个函数调用。函数调用比语言构造慢,无论你怎么看它。

通过添加if (isset($_SESSION))检查,您可以避免调用像 session_start 这样的函数,或者像其他人建议的那样session_idsession_status太多次。
只需查看语句,并计算函数调用:

if (isset($_SESSION))
//if, language construct
//isset, language construct
//$_SESSION, lookup of super-global
//----------------------------------
//Total function calls: 0

与以下相比:

if (session_status() == PHP_SESSION_NONE)
//if, language construct
//session_status(), function call
//PHP_SESSION_NONE, lookup of global, predefined constant
//----------------------------------------------------------
//total function calls: 1

当然,还有:

if(session_id() == '') 
//if, lang construct
//session_id(), function call
//'' string consant
//-------------------------------
// 1 function call

在所有 3 种情况下,如果当if的计算结果为 true,则会进行session_start函数调用。您现在拥有的将导致一次函数调用 1 次,替代方案将导致一次两次函数调用,然后每次调用 1 个函数。

就个人而言,我敦促您研究避免所有这些session_start电话需求的方法。任何像样的框架,通过.htaccess重写规则,都设法通过单个入口点引导所有请求(大多数情况下,这是一个index.php文件)。在那里,您可以致电session_start.然后,其他脚本不必为这样的代码而烦恼。

您可以使用这些方法中的任何一种来代替您的代码。最好检查会话是否设置。这将有助于防止不需要的函数调用。一次检查比一次不需要的函数调用更好,因此您可以减少执行时间

if (session_status() == PHP_SESSION_NONE) {
      session_start();
   }

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

你的 if 语句是不必要的。

要检查会话是否已启动,请执行以下操作:

if(session_id() == '') {
 //not started
      session_start();
}
 else {
      // session has been started
 }