销毁用于注销的会话变量


destroy session variable for logout

我想在重定向之前清除会话值。在我的logout.php中,我有会话destry代码。这段代码运行得很好,如果我返回行重定向代码。如果我包括重定向代码,它会在会话终止前重定向。

<?php
session_start();
session_unset(); 
$_SESSION = array();
session_destroy();
   /*
     echo ("<SCRIPT LANGUAGE='JavaScript'>
       window.location.href='login.php';
       </SCRIPT>"); 
    */ 
?>

您需要通过php头执行此操作,并将其放置在if语句中,这样在销毁会话后,它会将您重定向到login.php

<?php
session_start();
session_unset(); // Also there is no need for unsetting
$_SESSION = array(); //This is useless too.
// use php header instead of javascript
if(session_destroy()) //once you destroy session it automatically unsets all keys
{
 header("location: login.php");
}
?>

使用ob_start()

此函数将打开输出缓冲活动脚本中不发送任何输出(除了标头),而是输出被存储在内部缓冲器中。

此内部缓冲区的内容可以复制到字符串中使用ob_get_contents()的变量。要输出存储在内部缓冲区,使用ob_end_flush()。或者,ob_end_clean()将静默地丢弃缓冲区内容。

<?php ob_start(); ?>
<?php
session_start();
session_unset();
$_SESSION = array();
if(session_destroy())
{
 header("location: login.php");
}
?>

像这样在会话销毁后调用重定向

<?php
if(session_destroy())
{
header("location: login.php");
}

我相信Raheel Khan的答案是正确的。如果header("Location:login.php")不起作用,请验证您的代码在php打开标记之前是否有空格

<?

在标头之前不能将任何内容发送到浏览器。如果您向浏览器发送任何内容,则头重定向将不起作用。