【问题标题】:How do check if a PHP session is empty? [duplicate]如何检查 PHP 会话是否为空? [复制]
【发布时间】:2010-12-03 22:31:20
【问题描述】:

这是不好的做法吗?

if ($_SESSION['something'] == '')
{
    echo 'the session is empty';
}

有没有办法检查它是否为空或未设置?我实际上正在这样做:

if (($_SESSION['something'] == '') || (!isset($_SESSION['something'])) {
    echo 'the session is either empty or doesn\'t exist';
}

!isset 是否只检查 $_SESSION[''] 是否存在而不检查数组中是否存在值

【问题讨论】:

    标签: php session


    【解决方案1】:

    您正在寻找 PHP 的 empty() 函数

    【讨论】:

    • empty 很危险,因为它还会报告 false、0 和“0”为空。
    【解决方案2】:

    您可以使用 count() 函数查看 $_SESSION 数组中有多少条目。这不是好的做法。您应该设置用户的 id(或类似的东西)来检查会话是否已初始化。

    if( !isset($_SESSION['uid']) )
        die( "Login required." );
    

    (假设您要检查是否有人登录)

    【讨论】:

      【解决方案3】:

      我会使用issetempty

      session_start();
      if(isset($_SESSION['blah']) && !empty($_SESSION['blah'])) {
         echo 'Set and not empty, and no undefined index error!';
      }
      

      array_key_exists 是使用 isset 检查密钥的一个不错的替代方案:

      session_start();
      if(array_key_exists('blah',$_SESSION) && !empty($_SESSION['blah'])) {
          echo 'Set and not empty, and no undefined index error!';
      }
      

      确保在读取或写入会话数组之前调用session_start

      【讨论】:

      • 如果你已经在使用empty,则无需使用isset。 empty 还会检查变量是否存在,即不是 null/undefined
      • @knittl 最好在测试之前确保你有变量,看看它是否为空。
      • @knittl - 但是我们不知道它是否已设置,是否未设置 将返回空 true。我倾向于使用上述方法,但可能并不总是需要。
      • Empty 在不存在或 null 或 "" 或空数组时返回 false。为什么你还需要检查 isset ?阅读帮助文件:ca.php.net/empty
      • @random 这是不是的好习惯!它只是多余的。见stackoverflow.com/questions/4559925/…
      【解决方案4】:

      在访问不确定是否存在的变量之前,请使用issetemptyarray_key_exists(尤其是对于数组键)。所以在你的第二个例子中改变顺序:

      if (!isset($_SESSION['something']) || $_SESSION['something'] == '')
      

      【讨论】:

        【解决方案5】:

        如果要检查会话是否可用,您可能需要使用session_id() 函数:

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

        【讨论】:

          【解决方案6】:
          if(isset($_SESSION))
          {}
          else
          {}
          

          【讨论】:

            【解决方案7】:

            最佳做法是使用内置的array_key_exists 函数检查数组键是否存在。

            【讨论】:

              【解决方案8】:

              我知道这是旧的,但我遇到了一个问题,即在检查是否存在会话后我正在运行一个函数。每次我在注销后尝试加载页面时都会引发错误,但仍然可以正常工作,只是记录了一个错误页面。确保使用 exit();如果您遇到同样的问题。

                   function sessionexists(){
                      if(!empty($_SESSION)){
                   return true;
                       }else{
                   return false;
                       }
                    }
              
              
                      if (!sessionexists()){
                         redirect("https://www.yoursite.com/");
                         exit();
                         }else{call_user_func('check_the_page');
                       } 
              

              【讨论】:

                猜你喜欢
                • 2011-11-02
                • 2017-05-29
                • 1970-01-01
                • 2017-01-10
                • 2018-04-24
                • 1970-01-01
                • 2012-10-18
                • 1970-01-01
                • 2012-12-08
                相关资源
                最近更新 更多