0

请指教,如果我的想法是正确的。我搜索了信息,但没有找到确切的答案。

用户输入用户名和密码,输入的用户名/密码与mysql中相同。

我创建 $_SESSION['loggedin'] = 1; 这意味着在服务器上的某个地方创建了具有随机名称的文件,例如 r21bj2a3....,并且在用户浏览器中创建了具有类似 r21bj2a3...的值的 cookie。

在下一页我检查 if( $_SESSION['loggedin'] == 1 )。用户浏览器连接到服务器,向服务器发送如下信息:我有值为 r21bj2a3....的 cookie,请给我发送内容?会议?服务器发送特定 cookie 会话登录为 1 的信息。

据我了解,如果恶意用户获取 cookie 值 r21bj2a3....,发送到服务器并获得与普通用户相同的答案?

根据 $_SESSION['loggedin'] 我无法识别特定用户?要在成功登录后识别特定用户,我可以创建唯一令牌,在 mysql 中记录并通过会话传递?在来自传递的会话的密码保护页面上,我获取令牌值并检查(选择)该值是否存在于 mysql 中。这种方式可以吗?可以用好的方法发布一些链接吗?

关于令牌。我通过会话传递令牌值。这意味着如果恶意用户获取 cookie 值,发送到服务器并获取包含令牌值的答案(因此恶意用户获得普通用户的权限)?

4

3 回答 3

0

HTTP 是无状态协议。它不会跨多个页面跟踪数据。因此我们需要可以在网站的所有页面上全局访问的会话

为了识别当前登录网站的用户,我们需要在他成功认证后将用户表中的 user_id 字段的值存储到会话中。

例如

$_SESSION['user_id']=$result['user_id']

为了确定用户是否登录,我们可以检查 $_SESSION['user_id'] 变量的值。如果它为空,则用户未登录,否则用户已登录

于 2013-03-24T07:29:34.283 回答
0

我建议将所有活动会话保存在数据库中,您可以为此创建一个表,以防止会话劫持,您可以检查每个特定会话(登录)并查看用户是否已经过身份验证,然后,不允许二次身份验证。

这里的问题,如何识别用户?可以绑定一些信息,比如USER_AGENT,IP地址,但是这些信息也可以被黑客欺骗,但是概率比较小。

此外,一旦用户退出,您可以删除数据库中的会话记录。

于 2013-03-24T07:34:31.297 回答
0

要识别会话属于哪个用户,只需在会话中设置一个可行的

$_SESSION['user'] = user

您对授予会话访问权限的 cookie 是正确的。如果安全很重要,请使用 SsL。

于 2013-03-24T07:24:14.080 回答