销毁 php 后启动会话

Posted

技术标签:

【中文标题】销毁 php 后启动会话【英文标题】:Start session after destroy 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 中传递变量。

【问题讨论】:

进行重定向有什么好的理由吗?为什么登出页面不能显示成功状态? 【参考方案1】:

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

【讨论】:

这是解决您特定问题的最佳方法,但我仍然不明白您为什么不只在 LOGOUT.PHP 页面上显示消息。 @WatermarkStudios 我也在做同样的事情.. 他可能正在做重定向以避免刷新时重新提交表单...***.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年的

以上是关于销毁 php 后启动会话的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 关闭浏览器后会话销毁

CodeIgniter 3 会话在页面刷新后销毁

在 PHP 中销毁会话时出错

如何一键销毁php会话

远程销毁 php 中的会话(用户在其他地方登录)?

单击链接时销毁 PHP 会话