根据用户是否登录,我想在我的主页上显示特定信息。但是,以下是最好的方法吗?
<?php session_start()?>
if (!isset($_SESSION['test'])) {
session_destroy();
}
else {
show info
}
这是最佳实践吗?
你的代码不会做任何事情。
它只会输出:
if (!isset($_SESSION['test'])) { session_destroy(); } 其他 { 显示信息 }
如果您不指定是什么$_SESSION['test']
、如何设置或取消设置,那么您的代码将毫无意义。
大致猜想,你想做这样的事情:
<?php
session_start();
//during login
...
$_SESSION['token'] = md5($username . $_SERVER['REMOTE_ADDR']);
//at the top of all your pages.
if( isset($_SESSION['token']) && $_SESSION['token'] != md5($username . $_SERVER['REMOTE_ADDR']) ) {
session_destroy();
echo "Possible session hijacking, go away.";
exit;
}
因此,如果有人尝试附加到会话,他们将被拒绝,因为他们的 IP可能不同。如果您在共享 wifi AP 上,并且没有使用 HTTPS 或受信任的 VPN,那么同一 AP 上的某人可能会因为 NAT 而获取会话 cookie,并且仍然具有相同的公共 IP 地址。您可以添加额外的信息,例如$_SESSION['HTTP_USER_AGENT']
,但如果他们知道自己在做什么,那仍然是欺骗性的。
像这样的东西,加上 SSL 应该可以让你在绝大多数情况下免受会话 cookie 劫持和会话 ID 暴力破解。极少数是与您在同一个 NAT 的 AP 上的人,在您当时碰巧登录的站点上暴力破解会话 ID,并且很幸运。