我使用基于会话变量的简单登录系统。用户登录后,就会设置一个会话变量,告诉我的脚本要接受用户。我不使用任何自定义客户端 cookie 变量。
我想在登录屏幕上提供“让我全天登录”的选项。如何以一种安全的方式做到这一点?
首先:配置session.cookie_lifetime http://php.net/manual/en/session.configuration.php#ini.session.cookie-lifetime指令,可以在 php.ini、配置文件中,或者通过session_set_cookie_params() http://php.net/manual/en/function.session-set-cookie-params.php.
接下来,将用户名和密码的哈希值存储在会话中,并在每个页面上验证该登录。只要它仍然有效,他们就可以保持登录状态。
会话 cookie 的自然过期通常应该使事情保持整洁,因为如果他们保持活动状态,您不会让任何人在会话中途注销(当然,如果星星对齐的话)。如果做不到这一点,我会考虑紧随其后的 eCartoth 解决方案,因为您可以在 if 语句中添加第二行:
if (my_validate_user_function($_SESSION['username'],$_SESSION['passhash'])
&& $_SESSION['deathstamp'] > time()
) {
// user is logged in again, oh boy!
}
else {
// send in the death robots
header('Location: /login.php',true,302);
}
编辑:您可能需要考虑的一件事是会话固定和/或会话劫持。为了防止这种情况,我建议使用以下两种解决方案之一(或两者):
- 将用户的 IP 地址存储在会话中
- use session_regenerate_id() https://www.php.net/manual/en/function.session-regenerate-id.php每次成功登录尝试后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)