Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP注销我的网站?_Php_Html - Fatal编程技术网

如何使用PHP注销我的网站?

如何使用PHP注销我的网站?,php,html,Php,Html,我只是花了几个小时建立了一个登录系统,我的网站,我终于登录,但我不能注销 我尝试过使用会话名称,但仍然不起作用/ <?php session_start('$_SESSION['userId']'); session_unset('$_SESSION['userId']'); session_destroy('$_SESSION['userId']'); header("Location: ../../index.php?logout=success"); ?> - 这些是我i

我只是花了几个小时建立了一个登录系统,我的网站,我终于登录,但我不能注销

我尝试过使用会话名称,但仍然不起作用/

<?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>
    
    
    您确定要注销吗?
    注销
    
    这是includes/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>
    

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

    if( isset($_GET['logout']) && $_GET['logout'] == 'success') {
        // display link to log in
    } else {
        // display link to log out
    }
    
    一般来说,这些代码示例看起来有点混乱,我不认为您正确设置了登录功能

    将会话_start()放在标题的顶部,或者在确实需要时调用它,通常只需启动一次

    除此之外,不要使用表格注销-使用

    这会更好。

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

    session_start();
    session_destroy();
    header("Location: ../../index.php?logout=success");
    
    在您的login.php中

    <?php
        if(isset($_GET['logout']))
        {   
           unset($_SESSION['user_id']);
           //use this if you only want the user_id session to be unset.
        }
    ?>
    
    
    
    session\u start
    的第一个(也是唯一一个)参数

    会话\u取消设置

    这些不符合您的想法,这可能是您的问题的根本原因。

    请检查下面的URL
    session_start('$_SESSION['userId']');
    
    session_unset('$_SESSION['userId']');
    
    session_destroy('$_SESSION['userId']');