设置定义SESSION是否有点过分

时间:2014-04-07 09:34:24

标签: php

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

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

3 个答案:

答案 0 :(得分:1)

严格来说,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。然后,其他脚本不必费心这样的代码。

答案 1 :(得分:0)

您可以使用这些方法中的任何一种而不是您的代码。检查会话是否设置是一个好习惯。它将有助于防止不需要的函数调用。一次检查优于一个不需要的函数打电话。,这样你就可以减少执行时间。

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

或者

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

答案 2 :(得分:-1)

您的if语句是不必要的。

检查会话是否已启动:

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