如何检查 PHP 会话是不是为空? [复制]

Posted

技术标签:

【中文标题】如何检查 PHP 会话是不是为空? [复制]【英文标题】: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[''] 是否存在而不检查数组中是否存在值

【问题讨论】:

【参考方案1】:

您正在寻找 phpempty() 函数

【讨论】:

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 这是不是的好习惯!它只是多余的。见***.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();
           elsecall_user_func('check_the_page');
          

【讨论】:

以上是关于如何检查 PHP 会话是不是为空? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring JDBC ResultSetExtractor 中检查 ResultSet 是不是为空? [复制]

如何在 Shell Scripting 中检查目录是不是为空? [复制]

如何在 javascript 中检查此布尔哈希图是不是为空? [复制]

对空结果集的非法操作 - 如何检查它是不是为空? [复制]

如何在swift 3中检查字符串是不是为空? [复制]

如何从本地的 PHP session_start() 检查不同的变量? [复制]