我的登录系统目前的工作方式如下:
$_SESSION
变量和用户名中。
$_SESSION
中相反。我觉得这样就可以让间谍软件进入大门并窃取用户的凭据。$_SESSION
用户名和字符串与存储在MySQL中的用户名和字符串。$_SESSION
中删除随机字符串。我坚持的是当用户隐式注销时如何处理。也就是说,当他/她关闭浏览器窗口而不点击网站上的任何“注销”按钮时。我很确定我仍然需要从MySQL中删除随机字符串,因此有人不能使用被盗的cookie来登录。但是,如何知道用户何时关闭浏览器窗口?
(“记住我”功能目前无关紧要。)
答案 0 :(得分:3)
如何实施登录会话?
身份验证和会话管理是两回事,虽然它们紧密相连,但您似乎也在谈论授权。
如果身份验证成功,请生成一个长的,随机的字母数字字符串。
为什么呢? PHP已生成随机标识符(会话ID)。如果要区分经过身份验证/未经过身份验证的用户和/或确定哪个用户拥有当前会话,只需将用户名/用户ID存储在会话中。
将用户密码放在$ _SESSION变量
中
为什么你会想要这样做 - 一旦你认证了用户,你再也不需要再使用密码。
检查$ _SESSION用户名和字符串与存储在MySQL中的用户名和字符串
为什么呢?会话数据如何通过代码更改其他?如果您怀疑服务器端代码可能被篡改,那么无论您做什么都不重要,系统将是不安全的。
当用户明确注销时
...你明确地破坏了会话。就是这样。
当您从提议中删除冗余时,无需在隐式注销后进行清理。
BTW:您的提案中没有解决许多安全问题,特别是在身份验证尝试后重新生成会话ID。
答案 1 :(得分:0)
您可以在onclose事件上使用ajax调用来终止会话...从未尝试过但它应该可以工作:
$(window).unload( function () {
// ajax to kill the session
} );