如何检查 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】:您正在寻找 php 的 empty()
函数
【讨论】:
empty 很危险,因为它还会报告 false、0 和“0”为空。【参考方案2】:您可以使用 count() 函数查看 $_SESSION 数组中有多少条目。这不是好的做法。您应该设置用户的 id(或类似的东西)来检查会话是否已初始化。
if( !isset($_SESSION['uid']) )
die( "Login required." );
(假设您要检查是否有人登录)
【讨论】:
【参考方案3】:我会使用isset
和empty
:
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】:在访问不确定是否存在的变量之前,请使用isset
、empty
或array_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 中检查目录是不是为空? [复制]