1

所以我的问题是非常基本的。

在检查用户是否仍在任何页面上登录时,我将使用

if (isset($_SESSION['user']) && $_SESSION['user'] == true) { CODE }

但是,我不应该为 $_SESSION['user'] 使用散列值而不是布尔值吗?我找到的所有指南都使用布尔值,但从我的角度来看,这是一个安全漏洞,不是吗?人们一直在谈论 Session-Hjacking 和 Session-Fixation,如果我只是为用户会话使用布尔值,那将非常容易,不是吗?还是我只是在这里混合?

谢谢

4

1 回答 1

2

我在这里读了两个问题。第一个问题,“确定用户是否登录的最佳实践是什么?”和第二个问题“是否存在会话劫持和会话固定问题?”

第一个问题: 我使用过的大多数网络应用程序/cms 都有一个用户对象。从代码的角度来看,这个对象没有什么特别之处,它只是一个代表用户的对象。当前登录的用户将其用户对象存储在会话中。$_SESSION['user']

在 Drupal(和其他平台)中,a 函数用于返回当前登录的用户,如果用户未登录,则返回 False。

例子:

function user(){
 if( isset($_SESSION['user') and 
     is_object($_SESSION['user'] and 
     get_class($_SESSION['user']=='myUserClass')) ){

         return $_SESSION['user'];

     }else{
         return False;
      }
}

因此,在您的示例中,我们看到了有效,因为所有对象在子句if ( user() ) { CODE }中都评估为 True 。if

第二个问题: Session-Hjacking 和 Session-Fixation 并不是真正的问题。客户端(Web 浏览器)无权访问服务器的 $_SESSION 数组。简而言之,是的,您在这里混淆了。

于 2013-02-14T19:01:39.230 回答