编辑:只是想通过没有添加 出口(); 正如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
导致这种情况的原因是什么?
答案 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();
}
?>