php - 如何检查用户何时回来,注销后?
php - How to checking when the user come back, after log out?
我想在 php 中制作一个登录和注销页面。
到目前为止,我编写了所有代码,但除了我不知道如何检查变量 $_SESSION['login']
是否已设置之外。我尝试使用 isset();
unset();
session_destroy();
... 仍然没有解决。
我想要这个,因为如果用户从浏览器按下后退按钮,我想重定向到一个页面。 ;) 我喜欢像 google 和其他大型专业网站。 ;)
我从 https://www.formget.com/login-form-in-php/ 获取代码,并对其进行了改编。
session.php
<?php
session_start();
$user_check = '';
// I will not give you my passwords so easly :P
define('DB_USER', ' ');
define('DB_PSWD', ' ');
define('DB_HOST', ' ');
define('DB_NAME', ' ');
$connection = mysqli_connect(DB_HOST,DB_USER,DB_PSWD,DB_NAME) or die(mysql_error());
$user_check = $_SESSION['loginUser'];
$ses_sql = mysqli_query($connection,"SELECT Name FROM Passwords WHERE Name='$user_check'");
$row = mysqli_fetch_assoc($ses_sql);
$login = $row['Name'];
if(!isset($login)){
mysql_close($connection);
header("location : ../Resource.php"); // redirect
}
?>
请帮忙!
更新 1:
我也有这样的 logout.php :
<?php
session_start();
session_destroy();
header("location: ../Resource.php"); // redirect
?>
在登录页面,我通过 $_SESSION['loginUser']
传递了用户名
isset()
将适用于会话。如果你写:
if(isset($_SESSION['loginUser'])) {
// Your code
}
那行得通。您还可以使用 empty()
而不是 isset()
来检查会话是否为空,但通常检查会话是否已设置足以满足您正在执行的验证。
我已 运行 进入服务器,该服务器不会在处理页面之前设置会话,您需要将用户重定向到下一页,然后会话才会显示为有效。这在 cookie 中也很常见。
您还在检查是否有返回的内容,如果未设置 $login
则重定向 - 但您总是 设置它,所以您的重定向永远不会 运行。
这是一个更好的解决方案(使用您当前的代码;不包括其他人提到的 SQL 注入问题,那是另一个话题)。
// Limit your query to one result to MySQL will stop searching once it's found a match.
$ses_sql = mysqli_query($connection, "SELECT Name FROM Passwords WHERE Name='$user_check' LIMIT 1");
if($ses_sql->num_rows == 1) {
// A row was found, do something.
} else {
// No rows were found, do something else.
}
现在你有更少的变量,你正在使用 MySQLi 给出的分配数据,它是行,当找到结果时搜索数据库必须做的更少,并且你有一个 match/no-match 场景。
我想在 php 中制作一个登录和注销页面。
到目前为止,我编写了所有代码,但除了我不知道如何检查变量 $_SESSION['login']
是否已设置之外。我尝试使用 isset();
unset();
session_destroy();
... 仍然没有解决。
我想要这个,因为如果用户从浏览器按下后退按钮,我想重定向到一个页面。 ;) 我喜欢像 google 和其他大型专业网站。 ;)
我从 https://www.formget.com/login-form-in-php/ 获取代码,并对其进行了改编。
session.php
<?php
session_start();
$user_check = '';
// I will not give you my passwords so easly :P
define('DB_USER', ' ');
define('DB_PSWD', ' ');
define('DB_HOST', ' ');
define('DB_NAME', ' ');
$connection = mysqli_connect(DB_HOST,DB_USER,DB_PSWD,DB_NAME) or die(mysql_error());
$user_check = $_SESSION['loginUser'];
$ses_sql = mysqli_query($connection,"SELECT Name FROM Passwords WHERE Name='$user_check'");
$row = mysqli_fetch_assoc($ses_sql);
$login = $row['Name'];
if(!isset($login)){
mysql_close($connection);
header("location : ../Resource.php"); // redirect
}
?>
请帮忙!
更新 1: 我也有这样的 logout.php :
<?php
session_start();
session_destroy();
header("location: ../Resource.php"); // redirect
?>
在登录页面,我通过 $_SESSION['loginUser']
isset()
将适用于会话。如果你写:
if(isset($_SESSION['loginUser'])) {
// Your code
}
那行得通。您还可以使用 empty()
而不是 isset()
来检查会话是否为空,但通常检查会话是否已设置足以满足您正在执行的验证。
我已 运行 进入服务器,该服务器不会在处理页面之前设置会话,您需要将用户重定向到下一页,然后会话才会显示为有效。这在 cookie 中也很常见。
您还在检查是否有返回的内容,如果未设置 $login
则重定向 - 但您总是 设置它,所以您的重定向永远不会 运行。
这是一个更好的解决方案(使用您当前的代码;不包括其他人提到的 SQL 注入问题,那是另一个话题)。
// Limit your query to one result to MySQL will stop searching once it's found a match.
$ses_sql = mysqli_query($connection, "SELECT Name FROM Passwords WHERE Name='$user_check' LIMIT 1");
if($ses_sql->num_rows == 1) {
// A row was found, do something.
} else {
// No rows were found, do something else.
}
现在你有更少的变量,你正在使用 MySQLi 给出的分配数据,它是行,当找到结果时搜索数据库必须做的更少,并且你有一个 match/no-match 场景。