【问题标题】:How can I log out of my website using PHP?如何使用 PHP 退出我的网站?
【发布时间】:2019-09-06 19:34:19
【问题描述】:

我花了几个小时为我的网站设置了一个登录系统,我终于登录了,但我无法退出。

我已尝试使用会话名称,但仍然无法正常工作。/

<?php
session_start('$_SESSION['userId']');
session_unset('$_SESSION['userId']');
session_destroy('$_SESSION['userId']');
header("Location: ../../index.php?logout=success");
?>

-

这些是我的 index.php 标头上的登录/注销超链接,当我注销时,显示登录的那个,然后我登录,现在它卡在注销中。/

<li class="nav-item">
     <?php
      if (isset($_SESSION['userId'])) {
      echo '<a class="nav-link" href="login/login.php">Log In</a>';
      } else {
      echo ' <a class="nav-link" href="login/logout.php">Log Out</a>';}
     ?>
</li>

这是超链接所引用的注销页面。 /

<form action="includes/logout.php" method="post">
  <span>
   Are you sure you want to logout?
  </span>
  <div>
   <button>
    Log out
   </button>
  </div>
</form>

这是包含/logout.php,当它执行时,它会将我从注销页面带回 index.php,并在 url 中返回“index.php?logout=success”,但标题仍然显示注销而不是登录。 /

<?php
session_start();
session_unset();
session_destroy();
header("Location: ../../index.php?logout=success");
?>

除了会话实际停止之外,基本上一切正常。任何帮助将不胜感激。

编辑:我刚刚将所有文件上传到一个测试站点,然后在浏览器、隐身选项卡和手机上打开了该站点,它们都自动显示“登录”按钮,所以我猜问题在于这个;

<li class="nav-item">
     <?php
      if (isset($_SESSION['userId'])) {
      echo '<a class="nav-link" href="login/login.php">Log In</a>';
      } else {
      echo ' <a class="nav-link" href="login/logout.php">Log Out</a>';}
     ?>
</li>

【问题讨论】:

标签: php html


【解决方案1】:

在你的 login.php 中

<?php
    if(isset($_GET['logout']))
    {   
       unset($_SESSION['user_id']);
       //use this if you only want the user_id session to be unset.
    }
?>

【讨论】:

    【解决方案2】:

    请记住,$_SESSION 在重定向后可用,直到刷新页面。 这意味着如果您注销并被重定向, $_SESSION['userId'] 仍然可用,直到您再次刷新页面。这就是为什么你仍然可以看到这一点。 您正在发送 GET 参数 - 在您的页面上使用它而不是 $_SESSION['userId']:

    if( isset($_GET['logout']) && $_GET['logout'] == 'success') {
        // display link to log in
    } else {
        // display link to log out
    }
    

    总的来说,这些代码示例看起来有点乱,我不会说您正确设置了登录功能。

    将 session_start() 保留在 header 的顶部或在真正需要时调用它,一般只需要启动一次。

    除此之外,不要使用表单退出 - 使用 &lt;a href="&lt;logout path&gt;"...&gt;LOGOUT&lt;/a&gt; 会好很多的。

    【讨论】:

      【解决方案3】:

      如果您在注销后不需要任何会话变量,则以下三行代码可以正常工作。请检查一下。

      session_start();
      session_destroy();
      header("Location: ../../index.php?logout=success");
      

      【讨论】:

        【解决方案4】:
        session_start('$_SESSION['userId']');
        

        session_startmust be an array, not a string 的第一个(也是唯一一个)参数。

        session_unset('$_SESSION['userId']');
        

        session_unsetdoes not have any parameters.

        session_destroy('$_SESSION['userId']');
        

        Neither does session_destroy.

        这些并不像你认为的那样做,这可能是你麻烦的根本原因。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-03
          • 1970-01-01
          • 2012-05-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多