向用户显示他已注销

Posted

技术标签:

【中文标题】向用户显示他已注销【英文标题】:Showing the user that he has logged out 【发布时间】:2017-10-13 22:17:32 【问题描述】:

我想要这个:如果用户注销(会话销毁),那么索引应该说:您已注销。

if (isset($_SESSION['user']) && $_SESSION['user'] == true) 
echo "Welcome on the users page!, " . $_SESSION['username'] . "!";
     
    elseif (!isset($_SESSION['user'])) 
    echo "You logged out..";

我遇到的问题是,当您甚至还没有登录时,它也会显示您已注销,以便能够注销。我只希望它显示用户是否注销。

另外,我只希望“您已注销”出现一次。如果刷新页面,它应该消失了

【问题讨论】:

如果您希望快速修复,您应该将 $_SESSION['user'] 默认设置为 false,然后在用户注销时取消设置。但它不是很干净......或者可能定义一个其他会话变量只弹出一次错误消息。 【参考方案1】:

而不是使用 php unset();销毁会话的函数,您实际上可以在 $_SESSION["user"]; 中保存布尔值 "false";

例如在你的登出页面:

设置会话为 false,而不是销毁

例如:

`` //注销时 $_SESSION["user"] = false;

//now to check if user logged out

if($_SESSION["user"] === false) 

echo "you logged out";

elseif(!isset($_SESSION["user"])) //when the session finally expires
echo " you haven't logged in";

else
echo "you are logged in";



 //to get rid of it after page reload,    you need to unset the SESSION


unset($_SESSION["user"]);

【讨论】:

现在可以使用了,只需要在刷新的时候搞清楚怎么去掉。谢谢。 您可以通过实际销毁 $_SESSION['user']; 来摆脱它检查更新的答案【参考方案2】:

这是因为以下情况:

!isset($_SESSION['user']

无论用户是否登录都是如此。因此,您必须创建一些其他会话变量来检查用户是否已注销。这仅在用户注销时设置。

例如:

if( !isset($_SESSION['user'] && isset($_SESSION['logged_out']))

    // isset($_SESSION['user'] to check if user logged out and extra condition to check if user comes here after logged-out.

并在索引页面上检查。

【讨论】:

我知道为什么我的代码是错误的,但是如何检查用户是否退出?

以上是关于向用户显示他已注销的主要内容,如果未能解决你的问题,请参考以下文章

想要向新用户显示欢迎页面,并在 Flutter Firebase 中向登录用户显示主屏幕

为登录和注销的用户显示不同的标签栏项目

Spring Boot 仅针对没有 thymeleaf 登录的用户显示注销按钮

无法更新用户显示名称直到我注销并再次登录firebase

设计注销错误 - 找不到用户控制器的操作“显示”

用户登录时不显示表单,但用户注销时显示