【问题标题】:Start session after destroy php销毁 php 后启动会话
【发布时间】:2011-12-12 04:39:34
【问题描述】:

我的 Web 应用程序有一个注销文件。我想在注销后创建一个会话,以便我可以回显注销成功消息。我的注销代码有效,但在销毁前一个会话后我无法创建新会话。

最好的方法是什么,见代码:

//LOGOUT.PHP
session_start(); 

//// unset all $_SESSION variables
session_regenerate_id();
session_unset();
session_destroy();

$_SESSION['logoutsuccess'] = 'You have successfully logged out.';
header("Location: /login/");
exit;


//LOGIN.PHP (ECHO SUCCESS MESSAGE)

if(isset($_SESSION['logoutsuccess']))
{
echo '<div class="success">'.$_SESSION['logoutsuccess'].'</div>'; 
unset($_SESSION['logoutsuccess']);
}

如果可能,我想避免在 url 中传递变量。

【问题讨论】:

  • 进行重定向有什么好的理由吗?为什么登出页面不能显示成功状态?

标签: php session echo logout destroy


【解决方案1】:

session_destroy()之后再次呼叫session_start()

【讨论】:

  • 这是解决您特定问题的最佳方法,但我仍然不明白您为什么不只在 LOGOUT.PHP 页面上显示消息。
  • @WatermarkStudios 我也在做同样的事情.. 他可能正在做重定向以避免刷新时重新提交表单...stackoverflow.com/questions/6320113/…
【解决方案2】:

刚开始一个新的会话:

session_start();
session_destroy();
session_start();
$_SESSION['food'] = 'pizza';

【讨论】:

    【解决方案3】:

    与其尝试将其存储为会话变量,不如检查引用者并检查 /logout/

    if(strpos($_SERVER['HTTP_REFERER'], 'logout')  !== false) {
      echo 'You have successfully logged out.';
    }
    

    【讨论】:

      【解决方案4】:
      session_id($session_id_to_destroy);
      session_start();
      session_destroy();
      session_commit();
      

      【讨论】:

      • 请解释你的答案,它的作用,为什么,如何......一些东西,还要注意OP是2011年的
      猜你喜欢
      • 2015-03-20
      • 2012-05-25
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2011-02-01
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多