-2

我想知道如果用户尝试登录,您通常如何检查用户会话。

我使用这三种方式: 考虑到用户标识是来自数据库的用户标识。因此,如果用户登录,它应该大于 0。

 //With empty() function
if(empty($_SESSION['userid'])){
    echo 'you are not logged in';
}


// Check if userid session is zero
if($_SESSION['userid'] == '0'){
    echo 'you are not logged in';
}

// Check if userid is lower than 1
if($_SESSION['userid'] < '1'){
    echo 'you are not logged in';
}

这些可以吗,还是您更喜欢另一种方式?

即使用户 ID 为 0,isset() 函数也不返回 true 吗?

谢谢。

4

4 回答 4

1

答案是:没关系。但是,就性能而言,您需要这样:

if (isset($_SESSION['userid']))

并且您想为会话添加保护。阅读https://www.owasp.org/index.php/Session_hijacking_attack

于 2013-10-17T12:03:24.207 回答
0

好吧,考虑到你是那个由你决定的人$_SESSION['userid']

假设您只想知道它是否存在:

if (isset($_SESSION['userid'])) {
  // it's set
}

if (!empty($_SESSION['userid'])) {
  // it has a non-falsy value
}

这取决于您如何设计网站以进行检查<0==0(有效用户是否总是具有非零的正 ID?)并且,对于它的价值,empty已经在寻找“非虚假”值。所以只要$_SESSION['userid']有一个值并且(bool)$_SESSION['userid'] != false(这0 是错误的,1而更大的将是正确的)你就是金色的。

于 2013-10-17T11:58:23.760 回答
0

您可以结合一些方法来抑制 PHP 警告,例如:

if(isset($_SESSION['userid']) && empty($_SESSION['userid']) && ($_SESSION['userid'] > 0)) {
    //userid is set, isn't empty and is more than 0
} 
于 2013-10-17T11:58:45.297 回答
0

如果您正确设置了会话变量(验证了要添加到会话中的内容等),那么您只需要执行以下操作:

if( ! isset($_SESSION['userid'])){
    echo 'you are not logged in';
}

这是因为如果您在将其添加到会话之前对其进行了验证,则它应该始终大于 0。那么您所要做的就是如果用户注销然后只需使用unset删除 then userid

于 2013-10-17T11:59:40.500 回答