由于HTTP协议是无连接、无状态的,所以HTTP协议无法记住客户端的信息。为了弥补HTTP协议的这两种不足,所以出现了会话技术。
1 Cookie技术
1.1 什么是Cookie
服务器端,将能够唯一标识用户的数据保存在客户端的一种方式。之后,浏览器在每次请求时,都会自动携带给服务器。
1.2 Cookie应用场景
因为Cookie文件是保存到浏览器端的,其每次随身携带cookie数据到服务器,中途容易被其他脚本拦截,所以Cookie不安全,通常用来保存一些不重要的数据。如:登录时间。
1.3 Cookie的基本使用
1.3.1 增加cookie数据
<?php
// 增加一个Cookie
setcookie('book', 'xiaoaojianghu', time()+3600);
1.3.2 删除cookie数据
<?php
// 删除一个Cookie
setcookie('book', '', time()-1);
unset($_COOKIE['book']);
1.3.3 修改cookie数据
<?php
// 修改一个Cookie
setcookie('book', 'tianlongbabu', time()+3600);
1.3.4 读取cookie数据
<?php // 读取Cookie数据 echo '<pre>'; var_dump($_COOKIE['book']);
1.4 Cookie的使用细节
setcookie有7个参数:
参数1:cookie的名字
参数2:cookie的值
参数3:有效期
参数4:有效路径
参数5:有效域,用来设置cookie在哪个域名下有效
参数6:是否只能在HTTPS协议下传输
参数7:是否只在HTTP协议下
- 浏览器一般只允许存放300个cookie文件,每个站点最多20个,每个cookie的大小限制在4k左右
- setcookie前面不能有任何的输出
2 Session技术
2.1 什么是Session
session也是会话技术的一种,session以cookie为基础,将重要的数据保存到服务器,同时,将能够唯一标识这份数据的数据以cookie的形式保存到客户端。
2.2 Session的应用场景
验证码、防跳墙、购物车
2.3 Session的基本使用
2.3.1 增加session
<?php session_start(); $_SESSION['sex'] = female;
2.3.2 删除session
<?php session_start(); unset($_SESSION['sex']); session_destroy(); // 删除session文件
2.3.3 修改session
同2.3.1
2.3.4 查询session
<?php session_start(); echo '<pre>'; var_dump($_SESSION);
2.4 Session实例——防跳墙
防止用户未经登录就进入我们的后台。直接登录index.php会报错。
form.html代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head> <body> <form action="check.php" method="post"> 用户名:<input type="text" name="user"><br> 密码:<input type="password" name="pass"><br> <input type="submit" value="提交"> </form> </body> </html>
check.php代码如下:
<?php
// 接收表单提交的用户名密码
$user = $_POST['user'];
$pass = $_POST['pass'];
// 暂时给定合法用户为 张三 admin
if($user == 'admin' && $pass == 'admin'){
session_start();
$_SESSION['user'] = $user;
header("Refresh:3;url=index.php");
echo "登录成功";
exit();
}else{
header("Refresh:3;url=form.html");
echo '登录失败';
exit();
}
index.php代码如下:
<?php
session_start();
if(!isset($_SESSION['user'])){
header('Refresh:2;url=form.html');
echo '非法访问,小心我告你';
exit();
}
echo '后台首页';