我想创建一个简单的会话管理脚本并知道你对它的看法?它在逻辑上是否正确?
我读过如果https不可用,那么evey load上的session_regenerate_id可以是一个解决方案,对吗?
if($_SESSION["user"]["logged"] && is_numeric($_SESSION["user"]["id"])){
$id = $_SESSION["user"]["id"];
$sid = file_get_contents($id); // read from db the previous key
if($sid == $_SESSION["user"]["key"]){
echo "<p><a href='?logout'>logout</a></p>";
echo "<p><a href='/login.php'>refresh</a></p>";
session_destroy();
session_start();
session_regenerate_id(true);
$_SESSION["user"]["logged"] = true;
$_SESSION["user"]["id"] = $id;
$_SESSION["user"]["key"] = uniqid();
file_put_contents($id, $_SESSION["user"]["key"]); // write to db the new key
}
else {
// logout
}
}
提前谢谢!
答案 0 :(得分:0)
我读过如果https不可用,那么evey load上的session_regenerate_id可以是一个解决方案,对吗?
解决方案是什么? SSL / TLS提供传输级安全性,保护您在传输到用户和从用户传输的数据。在每个请求上重新生成会话ID与trasport安全性无关。确实没有人能够在运输过程中抓住你的饼干,但这并不是索明能够抓住这个饼干的唯一方式。也就是说,如果您的页面容易出现XSS,那么在社交工程师的帮助下,有人可能会窃取您的cookie。
重新生成可以提高端点(用户)的安全性(尽管它是有争议的),因为如果有人会窃取用户会话ID cookie但是不够快,不能用它做出请求,那么用户将无法使用被盗的值(这是不太可能他不那么快)。
所以一般来说,如果你不想这样做,你的方案是好的,它不是替代SSL / TL。登录后的renegeration应该是必须的,每次请求的再生是一个补充。