我看到很多关于使用cookie永远不会过期的教程和文档。但所有使用静态变量的教程都使逻辑变得如此不同。我的登录网站有3页:
index.php
(从此页面登录)proses.php
(处理登录)home.php
(登录后的页面)我会在每一页解释我的问题。第一,在index.php
中我想删除静态变量,因为我想使用带有mysqli的动态数据库。我怎么能这样做?
<?php
session_start();
//static variable
$user = 'vincy';
$pass = md5('jokam354');
//check session
if(isset($_COOKIE['login']))
{
if ($_COOKIE['login'] == $user)
{
$_SESSION['login'] = TRUE;
header('location: ./home.php');
exit();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Login Remember Me</title>
</head>
<body>
<form action="proses.php" method="post">
<p><label for="username">Username :</label> <input type="text" name="username" /></p>
<p><label for="password">Password :</label> <input type="password" name="password" /></p>
<p><label for="remember"><input type="checkbox" name="remember" value="true" checked="checked" /> Remember Me</label></p>
<p>
<button type="submit" name="login">Login</button>
<button type="reset" name="reset">Reset</button>
</p>
</form>
</body>
</html>
proses.php
<?php
session_start();
//static variable
if (empty($_POST['username'])) {
echo 'enter username';
} else {
$username = $_POST['username'];
}
if (empty($_POST['password'])) {
echo 'enter password';
} else {
$password = md5($_POST['password']);
}
//check login
$conn = mysqli_connect("localhost", "root", "", "reme");
$sql = "Select * from members where member_name = '" . $username . "' and member_password = '" . $password . "'";
$result = mysqli_query($conn,$sql);
if(@mysqli_num_rows($result) == 1)
{
//set session
$_SESSION = mysqli_fetch_array($result);
$_SESSION['login'] = TRUE;
//check remember me
if (isset($_POST['remember']))
{
$time = time();
//set cookie
setcookie('login', $username, $time + 3600);
}
//redirect to home page
header('location:./home.php');
exit();
} else {
header('location:./index.php');
}
?>
$_SESSION = mysqli_fetch_array($result);
中的语法proses.php
无效,我关闭浏览器后得到Undefined index: member_email in C:\xampp\htdocs\remember5c\home.php on line 17
home.php
<?php
session_start();
//check session
if (!isset($_SESSION['login']))
{
header('location:./index.php');
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Home Remember Me</title>
</head>
<body>
<h5>Welcome, your email is <?php echo $_SESSION['member_email'];?></h5>
<p><a href="./logout.php">Logout</a></p>
</body>
</html>
这是表格: table 感谢您提供任何帮助。
答案 0 :(得分:1)
这主要是评论......
“记住我”功能与长期持续会话非常不同。后者有various security implications。
您没有使用不安全的密码哈希值。您的代码易受SQL注入攻击。
你没有告诉我们哪一行是17(尽管我们可以猜到)。你没告诉我们表的结构是什么(它有一个member_email属性)。您没有在代码中添加任何诊断,以确定是否是会话或数据库是问题。
您正在尝试在输出正文后设置标题。