这是不好的做法吗?
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['']
是否存在,而不检查数组中是否有值
isset
和empty
(尽管在empty()
之后进行isset()
检查完全无用/冗余):
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
。
在访问您不确定是否存在的变量之前,请使用
isset
、empty
或 array_key_exists
(尤其是数组键)。因此,更改第二个示例中的顺序:
if (!isset($_SESSION['something']) || $_SESSION['something'] == '')
empty()
函数
您可以使用 count() 函数查看 $_SESSION 数组中有多少个条目。这不是一个好的做法。您应该设置用户的 id(或类似的东西)来检查会话是否已初始化。
if( !isset($_SESSION['uid']) )
die( "Login required." );
(假设您想检查某人是否登录)
if(isset($_SESSION))
{}
else
{}
我知道这已经很旧了,但是我遇到了一个问题,在检查是否有会话后我正在运行一个函数。每次我在注销后尝试加载页面时,它都会抛出错误,但仍然有效,只是记录了一个错误页面。确保使用 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');
}