如何检查PHP会话是否为空?

wil*_*fun 41 php session

这是不好的做法吗?

if ($_SESSION['something'] == '')
{
    echo 'the session is empty';
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查它是空的还是没有设置?我实际上是这样做的:

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

是否!isset只检查是否$_SESSION['']存在,并没有检查是否是有值的数组或不

kar*_*m79 90

我会用issetempty:

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

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!';
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您已经使用空,则无需使用isset.empty也会检查变量是否存在,即不是null/undefined (7认同)
  • @knittl最好在测试之前确保你有变量,看看它是否为空. (6认同)
  • 当不存在时返回false,或者返回null或""或空数组.你为什么还需要检查是否也存在?阅读帮助文件:http://ca.php.net/empty (4认同)
  • @knittl - 但是我们不知道它是否已被设置,是否未设置*或*empty true将被返回.我倾向于使用上述内容,但可能并不总是需要它. (2认同)
  • @Daok变量既可以存在也可以是空白的.检查它是否存在并且为空是一个好主意. (2认同)
  • @random 这是 __not__ 好习惯!它只是多余的。见 http://stackoverflow.com/questions/4559925/why-check-both-isset-and-empty (2认同)

Gum*_*mbo 11

在访问存在您不确定的变量之前isset,请使用emptyarray_key_exists(尤其是数组键).因此,在第二个示例中更改顺序:

if (!isset($_SESSION['something']) || $_SESSION['something'] == '')
Run Code Online (Sandbox Code Playgroud)


kni*_*ttl 6

你正在寻找PHP的empty()功能

  • empty是危险的,因为它也报告false,0和"0"为空. (16认同)

sve*_*ens 5

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

if( !isset($_SESSION['uid']) )
    die( "Login required." );
Run Code Online (Sandbox Code Playgroud)

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