你好,我在测试站点中遇到了一个记住我的功能时遇到的问题。目前,我正在尝试将nement_me存储在一个将从现在开始1个月过期的cookie中。这个想法是,如果用户按下"记住我"按钮,他应该在关闭浏览器并破坏会话后将登录时,如果他不按复选框,则应在关闭浏览器时登录(会话被销毁时,都应将其登录。(。目前它有效,但是只有当用户按下Navbar中的登录按钮时(他跳过表单并重定向到profil(。我想要的是用户在不需要按登录的情况下打开索引页面时,可以看到与用户打开索引页面时登录的用户相对应的。connect.php文件:
<?php
ini_set('session.cookie_lifetime', 0);
session_start();
//Our MySQL user account.
define('MYSQL_USER', 'root');
//Our MySQL password.
define('MYSQL_PASSWORD', '');
//The server that MySQL is located on.
define('MYSQL_HOST', 'localhost');
//The name of our database.
define('MYSQL_DATABASE', 'qh_beer_shop');
/**
* PDO options / configuration details.
* I'm going to set the error mode to "Exceptions".
* I'm also going to turn off emulated prepared statements.
*/
$pdoOptions = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false
);
/**
* Connect to MySQL and instantiate the PDO object.
*/
$pdo = new PDO(
"mysql:host=" . MYSQL_HOST . ";dbname=" . MYSQL_DATABASE, //DSN
MYSQL_USER, //Username
MYSQL_PASSWORD, //Password
$pdoOptions //Options
);
$pdo->query('SET NAMES utf8');
login.php:
<?php
require_once 'connect.php';
if((isset($_SESSION['user']) AND trim( $_SESSION['user'] ) != "") OR ( isset($_COOKIE['remember_me']) AND trim($_COOKIE['remember_me'] ) != "" ) ) {
if( isset($_COOKIE['remember_me']) AND trim($_COOKIE['remember_me'] ) != "" ) {
$_SESSION['user'] = $_COOKIE['remember_me'];
}
header('Location: profile.php');
exit;
}
$error = '';
try {
if (isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
//Retrieve the field values from our registration form.
// $username = !empty($_POST['username']) ? trim($_POST['username']) : null;
// $password = !empty($_POST['password']) ? trim($_POST['password']) : null;
//Construct the SQL statement and prepare it.
$sql = "SELECT
id AS id,
username AS username,
password AS password,
email AS email,
phone AS phone,
address AS address,
first_name AS first_name,
last_name AS last_name,
age AS age
FROM
users
WHERE
username = ?
";
$stmt = $pdo->prepare($sql);
$stmt->execute([$username]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
$passwordHash = $user['password'];
if (!password_verify($password, $passwordHash)) {
setcookie('remember_me', '', time() - 100000);
throw new Exception("Wrong username or password!");
}
else {
if(isset($_POST['remember'])) {
$month = time() + ( ( 3600 * 24 ) * 30 );
setcookie('remember_me', $_POST['username'], $month);
}
else {
$past = time() - 100;
setcookie('remember_me', '', $past);
}
$hour = time() + 3600;
setcookie('ID_my_site', $_POST['username'], $hour);
$_SESSION['id'] = $user['id'];
$_SESSION['user'] = $user['username'];
header('Location: profile.php'); exit();
}
//
// $_SESSION['id'] = '';
// $_SESSION['user'] = '';
// header('Location: login.php');
// exit;
}
} catch (Exception $exception) {
$error = $exception->getMessage();
}
?>
这是每个页面加载的纳维尔:
<?php
require_once 'connect.php'; ?>
<h1 style="width:50%; margin:0 auto; font-size: 50px; font-family: 'Raleway', sans-serif; color: black; font-weight: bold;">Quality House Beer</h1>
<nav>
<a href="index.php"><img src="images/logoNew_bubbles.png"></a>
<ul>
<?php if (!isset($_SESSION['user'])): ?>
<li><a id="home" href="index.php"><i class="fa fa-home"></i> HOME</a></li>
<li><a id="catalog" href="catalog.php"><i class="fa fa-list"></i> CATALOG</a></li>
<li><a id="about" href="about.php"><i class="fa fa-pencil"></i> ABOUT</a></li>
<li><a id="register" href="register.php"><i class="fa fa-user"></i> REGISTER</a></li>
<li><a id="login" href="login.php"><i class="fa fa-sign-in"></i> LOGIN</a></li>
<li><a id="faq" href="faq.php"><i class="fa fa-question"></i> FAQ</a></li>
<li><a href="#"><i class="fa fa-search"></i> <input
style="box-sizing: border-box; border: 2px solid; border-radius: 15px; height: 40px;"
type="text" placeholder=" Search..." name="search"></a></li>
<?php elseif (isset($_SESSION['user']) && $_SESSION['user'] == 'admin'): ?>
<li><a id="home" href="index.php"><i class="fa fa-home"></i> HOME</a></li>
<li><a id="catalog" href="catalog.php"><i class="fa fa-list"></i> CATALOG</a></li>
<li><a id="addBeer" href="create.php"><i class="fa fa-beer"></i> Add Beer</a></li>
<li><a id="settings" href="addBeer.php"><i class="fa fa-beer"></i> SETTINGS</a></li>
<li><a id="logout" href="logout.php"><i class="fa fa-sign-out"></i> LOGOUT</a></li>
<li><a href="#"><i class="fa fa-search"></i> <input
style="box-sizing: border-box; border: 2px solid; border-radius: 15px; height: 40px;width: 220px;"
type="text" placeholder=" Search..." name="search"></a></li>
<li><a id="profile" href="profile.php"><i class="fa fa-user"></i> <?= $_SESSION['user'] ?></a></li>
<?php else :; ?>
<li><a id="home" href="index.php"><i class="fa fa-home"></i> HOME</a></li>
<li><a id="catalog" href="catalog.php"><i class="fa fa-list"></i> CATALOG</a></li>
<li><a id="about" href="about.php"><i class="fa fa-pencil"></i> ABOUT</a></li>
<li><a id="basket" href="basket.php"><i class="fa fa-beer"></i> BASKET</a></li>
<li><a id="faq" href="faq.php"><i class="fa fa-question"></i> FAQ</a></li>
<li><a id="logout" href="logout.php"><i class="fa fa-sign-out"></i> LOGOUT</a></li>
<li><a href="#"><i class="fa fa-search"></i> <input
style="box-sizing: border-box; border: 2px solid; border-radius: 15px; height: 40px;width: 300px;"
type="text" placeholder=" Search..." name="search"></a></li>
<li><a id="profile" href="profile.php"><i class="fa fa-user"></i> <?= $_SESSION['user'] ?></a></li>
<?php endif; ?>
</ul>
</nav>
Navbar代码未检查是否设置了Cookie。这就是为什么即使您通过cookie登录,页面也不是您的。
添加到Navbar代码以下代码。在require_once 'connect.php';
if( isset($_COOKIE['remember_me']) AND trim($_COOKIE['remember_me'] ) != "" ) {
$_SESSION['user'] = $_COOKIE['remember_me'];
}
也在Navbar代码中,将空的$ _session ['user']视为未记录:
替换:
<?php if (!isset($_SESSION['user'])): ?>
with:
<?php if (!isset($_SESSION['user']) OR trim( $_SESSION['user'] ) == ""): ?>
新代码:
<?php
require_once 'connect.php';
if( isset($_COOKIE['remember_me']) AND trim($_COOKIE['remember_me'] ) != "" ) {
$_SESSION['user'] = $_COOKIE['remember_me'];
}
?>
<h1 style="width:50%; margin:0 auto; font-size: 50px; font-family: 'Raleway', sans-serif; color: black; font-weight: bold;">Quality House Beer</h1>
<nav>
<a href="index.php"><img src="images/logoNew_bubbles.png"></a>
<ul>
<?php if (!isset($_SESSION['user']) OR trim( $_SESSION['user'] ) == ""): ?>
<li><a id="home" href="index.php"><i class="fa fa-home"></i> HOME</a></li>
<li><a id="catalog" href="catalog.php"><i class="fa fa-list"></i> CATALOG</a></li>
<li><a id="about" href="about.php"><i class="fa fa-pencil"></i> ABOUT</a></li>
<li><a id="register" href="register.php"><i class="fa fa-user"></i> REGISTER</a></li>
<li><a id="login" href="login.php"><i class="fa fa-sign-in"></i> LOGIN</a></li>
<li><a id="faq" href="faq.php"><i class="fa fa-question"></i> FAQ</a></li>
<li><a href="#"><i class="fa fa-search"></i> <input
style="box-sizing: border-box; border: 2px solid; border-radius: 15px; height: 40px;"
type="text" placeholder=" Search..." name="search"></a></li>
<?php elseif (isset($_SESSION['user']) && $_SESSION['user'] == 'admin'): ?>
<li><a id="home" href="index.php"><i class="fa fa-home"></i> HOME</a></li>
<li><a id="catalog" href="catalog.php"><i class="fa fa-list"></i> CATALOG</a></li>
<li><a id="addBeer" href="create.php"><i class="fa fa-beer"></i> Add Beer</a></li>
<li><a id="settings" href="addBeer.php"><i class="fa fa-beer"></i> SETTINGS</a></li>
<li><a id="logout" href="logout.php"><i class="fa fa-sign-out"></i> LOGOUT</a></li>
<li><a href="#"><i class="fa fa-search"></i> <input
style="box-sizing: border-box; border: 2px solid; border-radius: 15px; height: 40px;width: 220px;"
type="text" placeholder=" Search..." name="search"></a></li>
<li><a id="profile" href="profile.php"><i class="fa fa-user"></i> <?= $_SESSION['user'] ?></a></li>
<?php else :; ?>
<li><a id="home" href="index.php"><i class="fa fa-home"></i> HOME</a></li>
<li><a id="catalog" href="catalog.php"><i class="fa fa-list"></i> CATALOG</a></li>
<li><a id="about" href="about.php"><i class="fa fa-pencil"></i> ABOUT</a></li>
<li><a id="basket" href="basket.php"><i class="fa fa-beer"></i> BASKET</a></li>
<li><a id="faq" href="faq.php"><i class="fa fa-question"></i> FAQ</a></li>
<li><a id="logout" href="logout.php"><i class="fa fa-sign-out"></i> LOGOUT</a></li>
<li><a href="#"><i class="fa fa-search"></i> <input
style="box-sizing: border-box; border: 2px solid; border-radius: 15px; height: 40px;width: 300px;"
type="text" placeholder=" Search..." name="search"></a></li>
<li><a id="profile" href="profile.php"><i class="fa fa-user"></i> <?= $_SESSION['user'] ?></a></li>
<?php endif; ?>
</ul>
</nav>