根据用户是否登录,我想在我的主页上显示特定信息。但是,以下是最好的方法吗?
<?php session_start()?>
if (!isset($_SESSION['test'])) {
session_destroy();
}
else {
show info
}
这是最佳做法吗?
答案 0 :(得分:3)
您的代码不会做任何事情。
它只会输出:
if(!isset($ _ SESSION ['test'])){session_destroy(); }其他{显示 info}
答案 1 :(得分:1)
如果您没有指定$_SESSION['test']
是什么,它是如何设置或未设置的,那么您的代码就毫无意义。
Ballpark猜测,你想做的事情如下:
<?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 可能不同。如果您使用的是共享无线AP,而不是使用HTTPS或可信任的VPN,那么同一AP上的某些人可能会阻止会话cookie,并且由于NAT而仍然拥有相同的公共IP地址。您可以添加额外的信息,例如$_SESSION['HTTP_USER_AGENT']
,但如果他们知道他们正在做什么,那仍然是可以欺骗的。
在这种情况下,除了SSL之外,在绝大多数情况下都应该保护您免受会话cookie劫持和会话ID强制攻击。极小的少数人是与你在同一个NAT上的人,在你当时碰巧登录的网站上强制建立会话ID,并且很幸运。