-3

根据用户是否登录,我想在我的主页上显示特定信息。但是,以下是最好的方法吗?

<?php session_start()?>

if (!isset($_SESSION['test'])) {
  session_destroy();
}
else {
  show info
}

这是最佳实践吗?

4

2 回答 2

3

你的代码不会做任何事情。

它只会输出:

if (!isset($_SESSION['test'])) { session_destroy(); } 其他 { 显示信息 }

演示:http ://codepad.viper-7.com/9a3iOK

于 2012-12-20T20:44:34.153 回答
1

如果您不指定是什么$_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,并且很幸运。

于 2012-12-20T21:09:30.137 回答