重定向没有在Php中发生

时间:2017-03-31 21:54:16

标签: php

我在 session_start()函数周围使用了一个特殊的包装类来为我的会话添加保护。

要将用户注销,我有一个这样的按钮:

 <a href="logout.php">
  <button data-toggle="modal" data-backdrop="false" href="" name="out" class="btn btn-primary navbar-btn" style="margin-right: 3px"><span class="glyphicon glyphicon-user"></span>Log Out</button></a>

这是logout.php:

<?php

error_reporting(0);
include('SessionManager.php');
$mySess = new SessionManager();
$session = $mySess -> sessionStart('InstallationName'); // create/start a new session or start the existent session

$mySess -> destroy(); //destroy the session

header('Location: page1bis.php');
exit();
?>

这是我的SessionManager类中的 destroy()函数:

<?php
class SessionManager
{
          .
          .
          .
static protected function destroy()
{
    echo $_SESSION['cook'];echo "<br>";
    echo "hello !";
    session_destroy();
    echo $_SESSION['cook'];
}
}
?>

但是当点击退出按钮时,它会转到 lougout.php 页面,但没有进行重定向,这里也是 lougout.php 页面:

tfe0eccar02k3pgi5b7i8i2ek5
hello !

ps: logout.php中的回声就是在这里显示会话被有效破坏(或者应该有2个令牌),即使我删除它们也 还有同样的问题

2 个答案:

答案 0 :(得分:3)

您无法在重定向之前输出。

在输出之前移动位置重定向逻辑,或者可以在脚本中添加ob_start();作为第一行,然后在重定向时丢弃该输出。

答案 1 :(得分:1)

启用PHP错误。您应该看到类似Warning: Cannot modify header information - headers already sent by...的内容,这意味着您不允许在标头功能之前回显/打印任何内容。