【问题标题】:How to display if you signed out in PHP? [closed]如果您在 PHP 中退出,如何显示? [关闭]
【发布时间】:2020-05-06 20:32:33
【问题描述】:

所以我有这个 index.php 文件和另一个 levels.php 文件,登录的用户可以在其中选择级别。如果我想从会话中注销,我希望它将用户带回 index.php,但由于注销不发送 POST 数据,我无法告诉 index.php 用户刚刚注销。

我该如何管理它,以便一个小 div 通知用户他刚刚成功注销?

【问题讨论】:

  • 您使用的是 php 会话吗?你在使用数据库吗?你只使用cookies吗?您这里缺少我们可以帮助您的信息。
  • 是的,会话,我将用户存储在数据库中(当然),不,我没有使用 cookie! :D 当按下注销按钮时,它会重定向到 logout.php,它只会取消设置 $_SESSION['username'] 然后重定向到 index.php 我想要“成功注销”的 div。
  • 我认为您的问题将受益于一些代码 sn-ps。所以答案不必猜测你在做什么。但它可能就像设置$_SESSION['just_logged_out']=true 一样简单,在输入index.php 后,您会在显示消息后查找...和unset($_SESSION['just_logged_out'])。
  • 如果您使用的是$_SESSION,那么您很可能会使用 cookie。否则,您如何将会话令牌与每个请求一起传递给服务器?如果您只是通过 HTTP 标头中的 POST 请求来执行此操作,那么您肯定已经把自己画到了一个角落,您需要依赖每个请求作为 POST 请求。例如,您可以通过将令牌作为查询字符串的一部分传递来取消绘制,但是为什么不只依赖 cookie 让您的生活更轻松呢?
  • 但是在注销会话结束时,我无法检查 just_logged_out 是真还是假。还是我错了?

标签: php authentication logout


【解决方案1】:

登录的想法(通常与客户端和服务器之间的状态保留相关联)最常见的是通过使用 cookie(或更恰当地sessions)来解决。这与向服务器发送 POST 请求无关。只需检查有状态信息是否仍然有效。

假设您执行与此类似的操作来让用户登录...

<?php
session_start();
if ($user->signIn()) { // successful sign in attempt
    $_SESSION['signedIn'] = true;
    $_SESSION['userId'] = $user->id;
} else {
    // failed to sign in
}

假设您这样做是为了让用户退出...

<?php
session_start();

// Destroy the session cookie on the client
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Destroy the session data on the server
session_destroy();

那么判断用户是否从index.php登录应该就这么简单了……

<?php
session_start();

if (!empty($_SESSION['signedIn'])) { // They are signed in
    /* Do stuff here for signed in user */
} else { // They are not
    /* Do other stuff here for signed out user */
}

【讨论】:

  • 唯一的问题是,所有刚从其他地方来且未登录的用户都会看到“成功退出”。这就是为什么我希望如果用户退出,他可以看到退出消息。感谢您的回答。
  • 不,他们不会。所有来自其他地方的用户都不会通过登录验证例程。
  • 您想要在 index.php 中说“成功退出”的想法,在与先前操作无状态关联的请求上,可能是您在这里绊倒的原因。相反,请根据 HTTP 的实际工作方式调整您的想法。用户发送退出请求。该请求被服务器捕获。 “您已成功退出”的响应应该来自该特定请求。对没有关联状态的 index.php 的请求不是完全独立的。试图以任何其他方式做这件事可能是徒劳的。为什么使用 HTTP 只是为了打破 HTTP 的工作方式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多