我在 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个令牌),即使我删除它们也 还有同样的问题
答案 0 :(得分:3)
您无法在重定向之前输出。
在输出之前移动位置重定向逻辑,或者可以在脚本中添加ob_start();
作为第一行,然后在重定向时丢弃该输出。
答案 1 :(得分:1)
启用PHP错误。您应该看到类似Warning: Cannot modify header information - headers already sent by...
的内容,这意味着您不允许在标头功能之前回显/打印任何内容。