我想在php中登录并注销页面。
到目前为止,我已经完成了所有代码,但是我知道如何检查变量$_SESSION['login']
是否已设置。我尝试使用isset();
unset();
session_destroy();
...但仍然没有解决它。
我想要这个,因为我想重定向到一个页面,如果用户按下浏览器中的后退按钮。 ;)我喜欢像谷歌和其他大型专业网站。 ;)
我从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']
答案 0 :(得分:0)
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给出的分配数据,它是行,在找到结果时数据库不必搜索,并且你有一个匹配/不匹配的场景。