是否有理由用数据库中的值填充会话属性?
1
$_SESSION['hash'] = query_row['hash']; //hash from database; unique to each user
然后在每个页面上,检查会话是否存在
if(isset($_SESSION['hash'])) && $db->checkLogin()
{
//user session is still valid
}
借此:
function checkLogin($session_hash)
{
if($_SESSION['hash'])
{
//check if $session_hash is found in database
}
}
而不是使用
2
$_SESSION['islogged_in'] = true;
并且只检查是否设置了会话
if(isset($_SESSION['islogged_in']))
{
//user session is still valid
}
使用第一种方法是否可以为您提供更多保护?用独特的东西而不是“真”来设置会话值是否明智?使用数据库数据验证 $_SESSION[] 值是否明智?为什么会更安全?
编辑:我知道哪些是保护会话免受固定和劫持的标准方法。这不是我的问题:)
我根本找不到使用方法1的理由(因此使用数据库进行验证,甚至使用用户名等唯一数据设置会话属性,..)据我所知,会话属性被保存在服务器端,因此用户/黑客不能修改它们。会话保护(劫持和固定)仅保护会话 id,因为这是唯一保存在 cookie 中的客户端(因此可以修改)。无论如何,我在互联网上看到很多程序员都这样做,所以这就是我问的原因。