带有会话的PHP用户身份验证

时间:2013-02-14 18:30:58

标签: php security authentication

所以我的问题非常基本。

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

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

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

谢谢

1 个答案:

答案 0 :(得分: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 }有效,因为所有对象在if子句中都评估为True。

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