本文章涉及的知识点有
1.GET参数获取和使用
2.foreach,基本使用实例
3.cookie和SESSION的作用与使用实例
4.数据库的SELECT查询
一个简单的电影查询功能
实例
# 0418 会话控制 ## Lesson1: 数据库管理网站数据 ## Lesson2. 会话机制原理与实现 _______________________________________________ <!-- 数据库文件 --> database.php <?php return[ 'type' => 'mysql', 'host' => 'localhost', 'dbname' => 'php', 'username' => 'root', 'password' => 'root', ]; _______________________________________________ <!-- 头部文件 --> tb.php <?php // 连接数据库 require 'connect.php'; // 获取网站配置信息 $sql = 'SELECT * FROM `system` LIMIT 1'; $stmt = $pdo->prepare($sql); $stmt->execute(); $system = $stmt->fetch(PDO::FETCH_ASSOC); // 获取栏目信息 $sql = 'SELECT * FROM `category`'; $stmt = $pdo->prepare($sql); $stmt->execute(); $cates = $stmt->fetchAll(PDO::FETCH_ASSOC); $cate_count = count($cates); // 获取电影信息 $sql = 'SELECT * FROM `movies`'; $stmt = $pdo->prepare($sql); $stmt->execute(); $movies = $stmt->fetchAll(PDO::FETCH_ASSOC); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="static/css/style.css"> <meta name="description" content="<?php echo $system['key'] ?>"> <meta name="keywords" content="<?php echo $system['desc'] ?>"> <title><?php echo $system['title'] ?></title> </head> <body> <div class="header"> <ul class="nav"> <li><a href="index.php">首页</a></li> <?php foreach ($cates as $cate):?> <li><a href="list.php?cate_id=<?php echo $cate['cate_id']; ?>"> <?php echo $cate['alias']; ?></a></li> <?php endforeach; ?> </ul> </div> _______________________________________________ <!-- 首页文件 --> index.php <?php include 'inc/tb.php'; foreach ($cates as $cate){ echo "<h2>{$cate['alias']}</h2>"; echo '<ol>'; foreach($movies as $movie){ if ($cate['cate_id'] === $movie['cate_id']){ echo "<li><a href='detail.php?mov_id=" .$movie['mov_id']. "'>{$movie['name']}</a></li>"; } } echo '</ol>'; } _______________________________________________ <!-- 电影页面文件 --> detali.php <?php // 引入头部 include 'inc/tb.php'; // 使用get获取电影ID $getid = $_GET['mo_id']; foreach($movies as $movie){ if ($movie['mov_id'] === $getid ){ $mo = "<h2>{$movie['name']}</h2>"; $mo .= "<img src='{$movie['image']}'>"; $mo.= "<p>{$movie['detail']}</p>"; echo $mo; } } _______________________________________________ <!-- 列表页面文件 --> list.php <?php include 'inc/tb.php'; // 使用get获取栏目ID $cate_id = $_GET['cate_id']; foreach ($cates as $cate){ if($cate['cate_id'] === $cate_id){ echo "<h2>{$cate['alias']}"; echo "<ol>"; // 遍历对应栏目的电影 foreach($movies as $movie){ if($cate['cate_id'] === $movie['cate_id']){ echo "<br><li><a href='detali.php?mo_id=" .$movie['mov_id']."'>{$movie['name']}</a><span> 电影介绍:{$movie['detail']}</span></li>"; } } } }
运行实例 »点击 "运行实例" 按钮查看在线实例
cookie与SESSION介绍和案例
<?php
// 设置
setcookie('username', 'admin');
// 可设置过期时间,默认关闭页面自动消除
// 设置user_id变量,在浏览器中一分钟后失效
setcookie('user_id', 10, time() + 60);
// 读取
// 需要刷新二次,才可以获取到cookie,原因是
// 第一次刷新,是将cookie写入到客户端, 即写操作
// 第二次刷新,是将写入到客户端的cookie数据读出来,即读操作
echo 'username = ', $_COOKIE['username'], '<br>';
echo 'user_id = ', $_COOKIE['user_id'], '<br>';
// 通过application中查看,可知username过期时间是时间戳起止计时的前一秒
// 意思就是关闭浏览器, 就会自动删除
// 如果想在一个cookie变量可存储多个值,可以使用数组语法
// 60*60表示1小时, 60*60*24表示1天
setcookie('user[name]', 'peter', time() + 60 * 60 * 24);
setcookie('user[id]', '20', time() + 60 * 60 * 24);
setcookie('user[email]', 'peter@php.cn', time() + 60 * 60 * 24);
if (isset($_COOKIE['user'])) {
foreach ($_COOKIE['user'] as $key => $value) {
echo "{$key} => {$value} <br>";
}
}
// 更新,直接修改$_COOKIE全局数组对应元素值即可
if ($_COOKIE['user_id']) {
$_COOKIE['user_id'] = 800;
}
echo 'user_id = ', $_COOKIE['user_id'];
// 删除
// 1. 方法1
unset($_COOKIE['username']);
// 2. 设置一个已经过期的持续时间
setcookie('username', '', time() - 3600);
//setcookie('PHPSESSID','',time()-3600);
// _____________________________________________________________ //
// session 会话
// 开启一个会话(之前不能有输出)
// session_start()自动设置客户端的session_id,或重启启用一个已存在的会话
session_start(); // 刷新页面, 打开application可以查看到PHPSESSID,适用于根路径
// 查看服务器上的sesscion会话存储的路径位置
echo session_save_path();
// 到该路径下可看到一个sess_为前缀,后跟session_id的文件名
// 文件内容为序列化的session变量:username|s:9:"peter zhu";user_id|i:10;
echo '<hr>';
// 设置
$_SESSION['username'] = 'peter zhu';
$_SESSION['user_id'] = 10;
// 读取
echo 'username = ', $_SESSION['username'], '<br>';
echo 'user_id = ', $_SESSION['user_id'], '<br>';
// 清除
//session_unset(); // 会话内容清空,但会话文件'sess_******'仍在
session_destroy(); // 会话内容清空,会话文删除,但客户端的cookie仍在,即会话仍在,还能重启
// 可以session_destroy()后, 再调用setcookie()清除掉客户端的session_id,就完全清除了会话
setcookie('PHPSESSID','',time()-3600,'/');
总结
俩者之间使用方法差别不大,
cookie:读取更快,不需要在服务器读取cookie
SESSION:更安全,会慢一点,因为需要在服务器读取SESSION
>