PHP session_start()这是最佳做法吗?

时间:2012-12-20 20:39:24

标签: php session isset

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

<?php session_start()?>

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

这是最佳做法吗?

2 个答案:

答案 0 :(得分:3)

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

它只会输出:

  

if(!isset($ _ SESSION ['test'])){session_destroy(); }其他{显示   info}

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

答案 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,并且很幸运。