【问题标题】:PHP "Session_regenerate_id" and Authentication of usersPHP“Session_regenerate_id”和用户身份验证
【发布时间】:2011-05-06 00:30:55
【问题描述】:
我正在我的网站上创建一个登录功能,并且我正在考虑在每个页面上重新生成会话 ID 以使事情更加安全。
我已阅读 PHP:s 有关 regenerate_id 的信息,但 PHP 页面上的帖子与他们提供的有关 session_regenerate_id 的信息大不相同。
谁能解释一下这两个问题:
谢谢
【问题讨论】:
标签:
php
mysql
html
security
session
【解决方案1】:
根据您的设置,在每个页面上调用 session_regenerate_id() 可能有点矫枉过正。该功能用于防止会话劫持,并且应在用户提升其权限级别(例如登录)时使用。通常,一旦用户登录,您就会切换到 https 连接,这意味着您只需调用 session_regenerate_id() 一次,因为新 cookie 将通过安全连接传输并且无法被窃听。但是,如果您的服务器上没有 SSL 证书,则在每个页面上重新生成会话 cookie 可能是一个不错的选择。
当您调用 session_regenerate_id() 时,您不需要复制会话数据。这一切都由 PHP 为您处理。基本上创建了一个新的会话令牌和 cookie,会话数据被复制到会话存储中以与新令牌相关联,如果您将 true 作为单个参数传递给函数,则磁盘上的旧会话数据文件将被删除。
您在会话中存储的内容以指示用户是否已登录由您决定。我通常只存储一个简单的布尔值来指示他们是否已登录,以及包含用户名、姓名等的其他值。然后检查某人是否已登录就像这样简单:
<?php
if ($_SESSION['logged_in']){
//User logged in
} else {
//User not logged in
}
?>
HTH。