2011-08-20 134 views
0

因此,如果创建了登录/注册系统,以便当用户登录时,用户被重定向到另一个仅限会员的页面(member.php),我将登录信息存储在用户的会话中。如何检查每个会话的会话是否有效?

当用户导航到成员页面时,在允许他看到内容之前,我想确保用户名/密码是有效的,并且用户有效登录。我如何确保用户有效登录时,他/她会会员的页面,对我来说,好像使用:

if (!isset($_SESSION['username'])) 
{ 
    die("You aren't allowed to access this page"); 
} 

会的工作,但我要保证它的安全,对我来说,它只是似乎并不足够安全(因为如果有某种欺骗会话的方式,他们所要做的就是将任何类型的文本作为用户名)。

我真的不知道,所以如何检查用户是否应该访问该页面?

回答

1

会话变量存储在您的服务器上,而不是存储在用户计算机上,如cookie。所以用户不能修改$_SESSION['username']。会话劫持(其中用户获得另一个登录用户的会话ID并使用它来构成该用户)唯一必须真正谨防会话的是会话劫持

+0

有没有办法打击会话劫持?如果是这样,怎么样? – Alper

0

如果用户知道有效值,但可能会欺骗会话ID cookie,但不会存储在服务器上的会话数据本身。

因此,他们可能不会仅仅通过某个用户名向您发送会话数据。

如果他们有机会获得别人谁登录的浏览器,他们可以窃取他们SESSID(这存储在客户端),但每个IP会话可以减轻一些。

+0

如何创建每IP会话? – Alper

+0

@Jacob:我不知道。这是[不是这样自动](http://stackoverflow.com/questions/2296571/php-session-cookies-fail-with-users-changing-ip/2296717#2296717)。你当然可以手动完成它,通过在登录时存储会话数据中的$ _SERVER ['REMOTE_ADDR']'(或其它),并检查每个请求的一致性。 –

-1

将加密的密码cookie/session var用盐或许,每隔一段时间都要对数据库进行检查。

+0

当身份验证细节首先被劫持时,“时不时地”检查并不能帮助您。他们没有改变。 –

+0

那么,每次新会话开始时,我是否会生成该密码并将其存储在数据库中,或者只是使用用户的加密密码?然后我会检查每个页面上的数据库吗? – Alper

+0

如果您想确保劫持的cookie不可用,您可以为每个IP地址制作新的盐。缺点是用户无法一次登录多个地点 – casraf