【发布时间】:2013-08-21 22:44:41
【问题描述】:
我正在使用 $_SESSION 让我的用户在登录后保持登录状态。
回到首页时,一开始看起来是登录的,但是刷新一次页面后,就不再登录了。
注意:我还在学习 PHP 编程,所以请不要介意我的大部分代码都相当不成熟。
Index.php 代码:
<?php
session_start();
$UserOnline = "Guest";
if (isset($_SESSION['username'])) {
$UserOnline = $_SESSION['username'];
}
echo $UserOnline;
?>
Login.php 代码:
<?php
session_start();
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username)) {
$InvalidLogin = "Please submit a username";
$_SESSION['IL'] = $InvalidLogin;
header ('Location: http://localhost/practice/index.php');
exit;
} elseif (empty($username)) {
$InvalidLogin = "Please submit a password";
$_SESSION['IL'] = $InvalidLogin;
header ('Location: http://localhost/practice/index.php');
exit;
}
require 'required/connect.php';
$result = mysqli_query($con, "SELECT * FROM users WHERE username='$username'");
$row = mysqli_fetch_array($result);
if ($password == $row['password']) {
$_SESSION['username'] = $username;
echo "Successful Login!";
echo "<br>";
echo "<a href='index.php'>Return to HomePage?</a>";
} else {
$InvalidLogin = "Your info didn't match ours!";
$_SESSION['IL'] = $InvalidLogin;
header ('Location: http://localhost/practice/index.php');
exit;
}
?>
如果用户在那里进行会话,我已经在 login.php 页面上进行了测试,并且我总是得到正确的返回值。问题是,在我在 Index.php 页面上刷新一次后,用户不再处于会话中。
是我忘记了什么,还是我没有正确使用 $_SESSION?还有另一个我根本不知道的错误吗?
【问题讨论】:
-
请注意,您应该在
header()调用检查空用户名和密码之后使用exit;。否则,即使在那些header()调用之后,脚本仍将继续运行。 -
loginAttempt.php 和你的 login.php 一样吗?是错字还是有 3 个文件?
-
使用 HTTP 1.1,您不需要
Location标头的完整 URI。一个简单的相对路径就可以了。让你的代码更便携 -
一些注意事项 - 首先,您现在有严重的 SQL 注入漏洞。其次,您将密码明文存储在数据库中,这通常是不好的做法。
-
不,它不是完全没问题。这就像几年前有人说使用这个 IE6 特定的功能,它没有任何规范,因为在这些日子里它工作得非常好。