1. 简单用户跟踪
本例将基于session,写一个简单的用户跟踪
用到以下几个文件:
- config.php
<?php
define('DB_HOST','php.edu'); // 数据库域名
define('DB_USER','root'); // 数据库用户名
define('DB_PWD','root'); // 数据库密码
define('DB_PORT','3306'); // 数据库端口号
define('DB_TYPE','mysql'); // 数据库类型
define('DB_NAME','first'); // 数据库中需要被操作的数据表名
define('DB_CHARSET','utf8'); // 编码方式
define('DB_DSN',DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET); // 数据源名
- login.php:
<?php
// 开启会话
session_start();
// 引入配置文件
require "config.php";
// 连接数据库
try {
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
// var_dump($pdo);
} catch (Throwable $e) {
echo $e->getMessage();
} catch (PDOException $e) {
echo $e->getMessage();
}
// 点击退出登录,清空$_SESSION数组
if ($_GET['action']=='loginOut') {
$_SESSION = [];
// print_r($_SESSION);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="check.php" method="POST">
<div>
<label for="">账户:</label>
<input type="text" name="username" id="username">
</div>
<div>
<label for="password">密码:</label>
<input type="password" name="password" id="password">
</div>
<button>登录</button>
</form>
</body>
</html>
- check.php:
<?php
// 开启会话
session_start();
// 指定接收数据类型和编码方式
header('content-type:text/html;charset=utf-8');
// 接收表单过来的数据
$username = $_POST['username'];
$password = $_POST['password'];
// 引入配置文件
require "config.php";
// 连接数据库
try {
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
// var_dump($pdo);
} catch (Throwable $e) {
echo $e->getMessage();
} catch (PDOException $e) {
echo $e->getMessage();
}
// sql查询语句
$sql = "SELECT `id`,`username`,`password` FROM `student` WHERE `username`=? AND `password`=?";
// 准备执行
$stmt = $pdo->prepare($sql);
// var_dump($stmt);
// 绑定
$stmt->bindParam(1,$username);
$stmt->bindParam(2,$password);
// 执行
$stmt->execute();
// 判断:如果验证通过,先清空SESSION,然后再把username储存在SESSION中,便于index.php判断
if ($stmt->rowCount()==1) {
$_SESSION = [];
$_SESSION['username'] = $username;
exit("<script>
alert('登录成功,点击确定进入主页');
location.href='index.php';
</script>
");
}else{
exit("
<script>
alert('用户名或密码输入有误,请重新输入');
location.href='login.php';
</script>
");
}
- index.php:
<?php
// 开启会话控制
session_start();
// 引入配置文件
require "config.php";
// 连接数据库
try {
$pdo = new PDO(DB_DSN,DB_USER,DB_PWD,[PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING]);
// var_dump($pdo);
} catch (Throwable $e) {
echo $e->getMessage();
} catch (PDOException $e) {
echo $e->getMessage();
}
// print_r($_SESSION);
// 1. 如果没有通过login.php登录页面,获取不到$_SESSION['username'],则不能进入主页
// 2. 如果直接进入主页,$_SESSION是一个空数组
// 3. 所以判断如果SESSION为空数组,说明没有经过登录操作,那么使页面跳转到登录页面
if (empty($_SESSION)) {
exit("
<script>
alert('请登录后再进入主页');
location.href='login.php';
</script>
");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页</title>
</head>
<body>
<h1>商城主页</h1>
<hr>
<p>欢迎您 <?php echo $_SESSION['username']; ?></p>
<a href="login.php?action=loginOut">退出账户</a>
</body>
</html>
麻烦老师看看写得对不对,因为这不是课堂作业。