Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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 如何使注销按钮在HTML中正常工作_Php - Fatal编程技术网

Php 如何使注销按钮在HTML中正常工作

Php 如何使注销按钮在HTML中正常工作,php,Php,我已经设计了一个网站,在子菜单中有一个注销选项。代码为HTML,如下所示:- <p><a href="adminlogin.php" target="self">logout</a></p> 现在,这成功地将我带回adminlogin.php页面,但在这之后,每当我按下web浏览器顶部的后退按钮时,我都会再次转到该页面,在按下注销按钮之前。但是,如果我按下了注销按钮,则不应该发生这种情况,除非我再次登录,否则将无法返回该页面 为避免注销后出现

我已经设计了一个网站,在子菜单中有一个注销选项。代码为HTML,如下所示:-

<p><a href="adminlogin.php" target="self">logout</a></p>

现在,这成功地将我带回adminlogin.php页面,但在这之后,每当我按下web浏览器顶部的后退按钮时,我都会再次转到该页面,在按下注销按钮之前。但是,如果我按下了注销按钮,则不应该发生这种情况,除非我再次登录,否则将无法返回该页面

为避免注销后出现浏览器后退按钮:

<?php 
      if(!isset($_SESSION['username']) && !isset($_SESSION['useremail'])){

       header("Location: login.php");  // redirect to login page or index page if email and username is not set in session
  } 

?>
 <?php
    if(isset($_GET['logout'])) {  
    session_start();
    session_destroy();
    unset($_SESSION["username"]);
    unset($_SESSION["useremail"]);

    header('Location: index.php');
    exit;
    }
 ?>

您必须添加每个页面的顶部,以检查用户是否已登录 在里面如果没有,则应将其重定向到登录页面:

示例:

<?php 
      if(!isset($_SESSION['username']) && !isset($_SESSION['useremail'])){

       header("Location: login.php");  // redirect to login page or index page if email and username is not set in session
  } 

?>
 <?php
    if(isset($_GET['logout'])) {  
    session_start();
    session_destroy();
    unset($_SESSION["username"]);
    unset($_SESSION["useremail"]);

    header('Location: index.php');
    exit;
    }
 ?>


用户登录后所有页面的工作代码:Home.phpabout.phpcontact.php

示例:

<?php 
// After User Login and come to home page.

 require 'database_conn.php'; // Connection
 session_start();    // Session start
?>


<?php

// If User is Not Login Then Redirect to `index` Page Automatically

//if(!isset($_SESSION['username']) && !isset($_SESSION['useremail']))

if(!isset($_SESSION['useremail'])){

    header("Location: index.php");
    // Redirect to index page if email is not set in session

}
?>
<?php 
// After User Click On Logout page.
 require 'database_conn.php'; // Connection
 session_start();    // Session start
?>


 <?php
    if(isset($_POST['logout'])) {  

    if(isset($_SESSION['useremail'])){

     unset($_SESSION["useremail"]);
     session_destroy();
     session_unset();    
     header('Location: index.php');

      }
    }
 ?>



简单注销按钮


logout.php


或者如果设置了Cookie,则


您需要会话来完成此操作。 所以基本上,当您登录时,您需要设置会话变量

$_SESSION['loged_in']=1; // set session with desired name 
在注销时,您需要销毁此会话值

 unset($_SESSION["loged_in"]); // unset specific session 

最重要的是,您需要在不希望用户不登录的每个页面上检查会话值。像

 if(isset($_SESSION['loged_in']) && !empty($_SESSION['loged_in'])) {
     redirect('login.php'); // redirect to log in page 
}

如果您正在使用会话,则需要在注销时销毁会话,并检查每个已验证页面上的会话。您如何验证用户是否已登录?使用客户端cookie还是服务器会话?无论哪种方式,隔离的登录区域都不会验证会话,因此显示用户仍在登录。这是一个相当广泛的问题,因为我们不知道您的用户会话是如何管理的
session_destroy();  // destroy al
 if(isset($_SESSION['loged_in']) && !empty($_SESSION['loged_in'])) {
     redirect('login.php'); // redirect to log in page 
}