php - 检查会话奇怪的行为

时间:2014-11-24 09:19:22

标签: php session

编辑:只是想通过没有添加     出口(); 正如zerkms和user1578653指出的那样,这段代码无用而且可能很危险,不应该使用它。


我正在写一个小cms并检查用户是否通过会话登录。我的后台的每一页都有一个:

require('includes/security.php');

使用以下代码

<?php

  session_start();

  session_regenerate_id();

  if (!isset($_SESSION["user_logged"]) or !isset($_SESSION["ip"]) )
   {     
      session_destroy();
      unset($_SESSION['user_logged']);
      unset($_SESSION['ip']);
      unset ( $_SESSION );
      header("location: index.php");
   }

   if ($_SESSION["ip"] !=  $_SERVER['REMOTE_ADDR'])

   {
      session_destroy();
      unset($_SESSION['user_logged']);
      unset($_SESSION['ip']);
      unset ( $_SESSION );
      header("location: index.php");
   }

   if ($_SESSION["user_logged"] !=  "yes")

   {
      session_destroy();
      unset($_SESSION['user_logged']);
      unset($_SESSION['ip']);
      unset ( $_SESSION );
      header("location: index.php");
   }

?>

如果我尝试直接访问任何页面,它会按预期工作,并将我重定向到index.php,除了单个页面。

此页面简单地从POST中获取数据并更新/删除数据库中的图像/数据。

我能想到的唯一区别是这个页面没有任何html,并且它与其他文件夹在同一个文件夹中。

但是当我尝试直接访问它而不是重定向我时,它会立即:

Notice: Undefined variable: _SESSION
Warning: session_destroy() [<a href='function.session-destroy'>function.session-destroy</a>]: Trying to destroy uninitialized session

此页面的开头完全如下:

<?php

require('includes/security.php');

// Engine - Update and Delete Images

导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:1)

您的代码最有可能尝试多次销毁会话(每个'if'一次)。你也在每个'if'做同样的事情 - 尝试将security.php中的代码更改为:

<?php

  session_start();

  session_regenerate_id();

   if(
      !isset($_SESSION["user_logged"]) || 
      !isset($_SESSION["ip"]) || 
      $_SESSION["ip"] !=  $_SERVER['REMOTE_ADDR'] || 
      $_SESSION["user_logged"] !=  "yes"
   ) {     
      session_destroy();
      unset($_SESSION['user_logged']);
      unset($_SESSION['ip']);
      unset ( $_SESSION );
      header("location: index.php");
      exit();
   }
?>