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

时间:2019-04-16 16:16:42

标签: php html

我只花了几个小时就设置了网站登录系统,最终我登录了,但无法注销。

我尝试使用会话名称,但仍然无法使用。/

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

-

这些是index.php标头上的Login / Logout超链接,当我注销时,显示登录内容的那一刻,然后我登录,现在卡住了注销。/

<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>

4 个答案:

答案 0 :(得分: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.
    }
?>

答案 1 :(得分:0)

请记住,重定向后直到刷新页面后,$ _ 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()保留在标题的顶部,或者在真正需要它时调用它,通常只需要启动一次即可。

除此之外,请勿使用表格进行登出-使用 <a href="<logout path>"...>LOGOUT</a>  会更好。

答案 2 :(得分:0)

如果您注销后不需要任何会话变量,则遵循以下三行代码即可正常工作。

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

答案 3 :(得分:0)

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

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

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

session_unset does not have any parameters

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

Neither does session_destroy

这些都不按照您的想法去做,这可能是您遇到麻烦的根本原因。