我正在我的网站上创建一个登录功能,我正在考虑在每个页面上重新生成会话ID以使事情更安全。
我已阅读有关regenerate_id的PHP:s信息,但PHP页面上的帖子与他们提供的有关session_regenerate_id的信息完全不同。
有人可以解释这两个问题:
我是否需要将旧会话数据复制到新生成的会话数据中,还是自动完成?代码示例非常受欢迎...
如何查看用户是否已登录?我应该在会话变量中存储什么,以及如何存储?代码示例非常受欢迎......
由于
答案 0 :(得分:7)
在每个页面上调用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。