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

PHP |是否需要验证会话属性?为什么?,php,database,session,login,Php,Database,Session,Login,是否有理由用数据库中的值填充会话属性 1. 然后在每个页面上,检查会话是否存在 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 }

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

1. 然后在每个页面上,检查会话是否存在

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. 并且仅检查会话是否已设置

if(isset($_SESSION['islogged_in']))
{
//user session is still valid
}
使用第一种方法会给你更多的保护吗?将会话值设置为唯一值而不是“true”是否明智?使用数据库数据验证$\u SESSION[]值是否明智?为什么会更安全呢

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


我根本找不到使用方法1的理由(因此使用数据库验证,甚至使用用户名等唯一数据设置会话属性…),据我所知,会话属性保存在服务器端,因此用户/黑客无法修改它们。会话保护(劫持和固定)只保护会话id,因为这是保存在客户端cookie中的唯一内容(因此可以修改)。我在互联网上看到很多程序员都这样做,这就是我为什么要问的原因。

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


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

如果您不想知道有关用户的任何信息,除非他已成功登录,则没有理由存储该id并检查该id是否存在(或类似情况)。您和您可以单独向会话写信。如果您的服务器被黑客攻击(例如:一些人可以将代码或会话上传到您的服务器),那么您遇到的问题比检查会话数据(您写入会话中的数据)是否有效要多得多:)

是。会话_cookie存储在cleint端的cookie中,有时存储在服务器的tmp文件夹中(witch是世界可读的)。是的,使用DB也更安全。@Louis。会话数据存储在服务器上。会话id作为cookie存储在客户端上。问得好。知道你在和哪个用户打交道是件好事。我通常在会话变量中保存一个用户对象,其中包含随时可用的信息。并设置会话以保存到数据库。但只要你不需要知道谁登录了,我会选择选项2。这就是wat I meat@aziz,你只是解释得更好而已!:)如果你有会话固定和劫持的内容,我不认为有理由在每个请求中检查数据库。
$_SESSION['islogged_in']  = true;
if(isset($_SESSION['islogged_in']))
{
//user session is still valid
}