PHP |验证会话属性是否必要,为什么?

时间:2012-11-16 22:13:00

标签: php database session login

是否有理由使用数据库中的值填充会话属性?

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
}

使用第一种方法是否可以为您提供更多保护?将会话值设置为唯一而不是'true'是明智的吗?使用数据库数据验证$ _SESSION []值是否明智?为什么它会更安全?

编辑:我知道哪些是保护会话免受固定和劫持的标准方法。这不是我的问题:))

我找不到使用方法1的理由(因此使用数据库进行验证,甚至使用username,...等唯一数据设置会话属性)据我所知,会话属性正在服务器端保存,所以用户/黑客无法修改它们。会话保护(劫持和修复)仅保护会话ID,因为这是唯一在cookie中保存在客户端上的东西(因此可以修改)。无论如何,我在互联网上看到很多程序员这样做,所以这就是我要问的原因。

2 个答案:

答案 0 :(得分:0)

我认为您最好使用方法2.会话只能由服务器设置,因此如果设置了,您就知道您的用户已经过验证。第一种方法每次都不必要地再次检查数据库,并且不再安全。这两种方法都不能防范session hijacking

如果您想防止会话劫持,您还可以在会话中存储用户的IP,并每次检查以确保它没有更改。这是一种相当简单易行的检查方法。如果您想要其他更强大的替代方案,我建议您查看this page

答案 1 :(得分:0)

如果你不想知道关于用户的任何信息,除了他已成功登录,没有理由存储id并检查id是否存在(或类似的东西)。你和你一个人可以写到会议。如果您的服务器被黑客攻击(例如:某些人可以将代码或会话上传到您的服务器),那么除了检查会话数据(您写入会话)是否有效之外还有更多问题:)