2011-06-26 64 views
1

我对PHP还是很陌生,但很多阅读内容都提示使用会话变量来检查用户是否已登录。IE我会添加一个includes.php文件那会检查是否$_SESSION['login'] == true,但看到会话变量只是cookie,有人可以很容易地设置自己的权利?要检查用户是否已通过身份验证,另一种方法是检查吗?替代使用会话变量进行身份验证

+0

阅读以下内容:http://stackoverflow.com/questions/1221447/what-do-i-need-to-store-in-the-php-session-when-user-logged-in/1225668#1225668 –

回答

2

会话与Cookie大不相同。所有数据都存储在服务器中的会话文件中,cookie本身仅存储浏览器标识符以与服务器上的正确会话文件相匹配。不管怎么样,你都需要cookies,所以我相信你可以安全地使用会话来检查经过身份验证的用户。

+1

大声笑,相同的开头句子,比我早12秒。 –

+0

@迈克尔哈哈是啊,我刚刚编辑和更改,使其更容易混淆:) –

1

会话变量不仅仅是cookie。客户端浏览器收到一个cookie,将其附加到服务器上的会话中,但只有服务器可以设置和读取$_SESSION的变量。

虽然客户端可以通过cookie向服务器传递他们想要的任何信息,但会话ID难以猜测(尽管不是不可能),从而难以劫持其他用户的会话。

防止劫持会话的常用方法是在$_SESSION中存储用户IP地址,用户代理字符串或其他可识别字符串的指纹。这也可以是您生成的随机令牌字符串,并发送到客户端,同时也存储在$_SESSION中。在下一个表单文章中,您希望令牌以隐藏的输入形式发送,并与存储在服务器上的令牌相匹配。

1

但看到会话变量的 只是饼干,有人可以轻易 设置自己的权利?

错!会话cookie将只包含token of the session,会话本身及其值将驻留在服务器上。 Cookie将使用的令牌值将用于查找会话。

什么是另一种方式去 检查,看看如果用户已经 认证?

将认证存储在数据库中。

0

如果您通过HTTPS进行身份验证,则Cookie将受到保护。另外,当你设置一个会话时,你正在处理客户端一个带有随机会话UUID的cookie,该UUID将转换为服务器上的关键值存储,客户端不能只设置“login = true”并获得访问权限。

+1

HTTPS只保护通过登录表单(或任何其他形式)发送的数据。它不能保证用户提供他的会话标识符的方式。 – fyr