我有一个问题,当用户登录它的确实很好,当他退出我试图破坏会话并阻止他通过点击后退按钮访问页面,但它没有工作用户注销,但当我点击浏览器的按钮他仍然能够通过单击后退按钮执行任务,即使他已退出。
这是我的表单代码:../ FrontEndFiles / AdminLogin.php
<div class="center">
<form name="myForm" method="post" action="../Admin/AdminData.php" onsubmit="return validateForm()">
<label>User name:</label>
<input type="text" name="user_name" placeholder="User">
<br>
<br>
<label>Password:</label>
<input type="password" name="password" placeholder="Password">
<br>
<input type="submit" name="login_Admin" value="login">
</form>
</div>
在代码执行后点击提交按钮:../ Admin / AdminData.php
if (isset ($_POST['logout'])) {
$dbname->logout();
}
并调用以下函数:
public function logout() {
unset($_SESSION["dbuser_name"], $_SESSION["dbpassword"], $_SESSION["dbid"]);
session_unset();
Session_destroy();
header('Location: ../FrontEndFiles/AdminLogin.php');
exit();
}
这是管理员的登录代码:
public function loginAdmin($login_admin) {
if (!empty($login_admin[0]) || !empty($login_admin[1])) {
$query = "SELECT Patient_ID FROM Patient WHERE Patient_name = '$login_admin[0]' and Patient_password = $login_admin[1] and Role = 'a'";
//var_dump($query);
$abc = $this->conn->query($query);
$row = mysqli_num_rows($abc);
if ($row == 1) {
while ($row1 = $abc->fetch_assoc()) {
$_SESSION["dbuser_name"] = $row1['Patient_name '];
$_SESSION["dbpassword"] = $row1['Patient_password'];
$_SESSION["dbid"] = $row1['Patient_ID'];
}
header('Location: ../FrontEndFiles/Admin_Index.php');
} else {
header('Location: ../FrontEndFiles/AdminLogin.php');
}
} else {
header('Location: ../FrontEndFiles/AdminLogin.php');
}
}
答案 0 :(得分:2)
为了防止用户在未登录的情况下访问页面,您需要做的是检查用户是否确实已登录。
例如:
// Prevent unauthorized users from visiting this page
if (!$_SESSION['dbuser_name']) {
header("Location: login.php");
exit;
}
注意 exit;
之后的header(...)
会阻止脚本进一步执行。有一些方法可以防止你的浏览器重定向。 exit;
确保您的用户无法在未登录的情况下看到任何网页内容。
此外,当用户退出时,请务必清除其所有数据:
if (!isset($_SESSION)) {
session_start();
}
session_destroy();
unset($_POST);
header("Location: login.php");
exit;
这很可能会解决您的问题。
另一个注释我建议您不要在会话中存储用户密码。
答案 1 :(得分:0)
使用元标记进行无缓存
<meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Expires" Content="0">
答案 2 :(得分:0)
主文件Ex。 index.php或header.php写到下面的代码
if(!$_SESSION["dbuser_name"])
{
header('Location: login.php');
}
答案 3 :(得分:0)
在Admin_Index.php的顶部添加此代码。
if(!isset($_SESSION['dbuser_name']) || !isset($_SESSION['Patient_password']) || !isset($_SESSION['Patient_ID']))
{
header('Location: ../FrontEndFiles/AdminLogin.php');
exit();
}
这会将您重定向到登录页面..如果用户登录并尝试输入您的Adminlogin。
答案 4 :(得分:0)
将此函数添加到functions.inc.php或使用所有脚本加载的任何文件中:
function isAuthorized(){
if (isset($_SESSION) && isset($_SESSION['dbid'])){
return true;
}
return false;
}
在需要授权的每个页面上,您只需:
if (!isAuthorized()){
header("Location: login.php");
die(); // Stop the script! Browsers can choose to ignore the redirect.
}
您可以选择在isAuthorized函数中执行重定向和die()..由您决定。
答案 5 :(得分:0)
在PHP代码中实现此功能,在每个页面的顶部,检查用户是否已登录,如果没有重定向到登录页面
<?php
if(!isset($_SESSION['isLogged'])) :
header("Location: login.php");
?>