PHP(14)会话技术
- 一、概念
- 二、分类
- 三、cookie技术
- 1. cookie的基本使用
- 2. cookie的生命周期
- 3. cookie的作用范围
- 4. cookie的跨子域
- 5. cookie的数组数据
- 四、session
- 1. session原理
- 2. session基本使用
- 3. session配置
- 4. 销毁session
一、概念
HTTP协议是一种无状态、无连接的协议,无法判断多个请求是否来自同一个用户。会话技术就是让HTTP协议识别来自同一个用户的多个请求。
二、分类
- cookie:是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。本质是由Web服务器保存在客户端上的小文本文件,可以包含有关用户的信息。
- session:session技术是将数据保存在服务器端,session技术的实现依赖于cookie技术。
- 区别
区别 | cookie | session |
---|---|---|
安全性 | 存储在浏览器端,安全性低 | 存储在服务器,安全性高 |
数据大小 | 数量和大小都有限制(4KB) | 数据存储不限 |
可用数据类型 | 只能存储简单数据,数值、字符串 | 可以存储复杂数据 |
三、cookie技术
setcookie(名字, 值, 生命周期, 作用范围, 域名);
1. cookie的基本使用
- 设置cookie信息:setcookie(名字, 值)
- 名字必须是字符串。
- 值必须是简单类中的整数或字符串。
setcookie('age', 1);
- 读取cookie信息:$_COOKIE
var_dump($_COOKIE);
2. cookie的生命周期
- 默认关闭浏览器则生命周期结束。
- 通过setcookie可以限定生命周期(必须加 time()):
setcookie("a1", 'a1', time() + 7 * 24 * 60 * 60);
- 手动结束生命周期:
setcookie('age', '');
、setcookie("a1", 'a1', time());
3. cookie的作用范围
- 默认范围:上层文件夹中设定的cookie可以在下层中访问,而下层的cookie不能在上层访问。
- 把cookie的作用范围设置为网站根目录:
setcookie('a1', 'a1', 0, '/');
4. cookie的跨子域
- 默认不允许跨域访问cookie。
- 设置cookie跨子域:
setcookie('a1', 'a1', 0, '/', 'mysite.com');
5. cookie的数组数据
- cookie只能设置成简单数据类型。
- 把cookie伪装成数组:
setcookie('goods_id[0]', 1);
setcookie('goods_id[1]', 2);
setcookie('goods_id[2]', 3);
setcookie('goods_id[3]', 4);
- 获取cookie数组:
$_COOKIE['goods_id'][2]
四、session
1. session原理
- session与浏览器无关,但与cookie有关。
- PHP碰到session_start()时开启session会话,会自动检测sessionID
- 如果cookie中存在,则使用现成的。
- 如果cookie中不存在,会创建一个sessionID,并通过响应头以cookie形式保存到浏览器中。
- 初始化超全局变量$_SESSION为一个空数组
- PHP通过sessionID去指定存放session文件的位置匹配对应的文件
- 不存在该文件,则创建一个sessionID命名文件
- 存在该文件,读取文件内容,将数据存储到$_SESSION中
- 脚本执行结束,将$_SESSION中保存的所有数据序列化存储到sessionID对应的文件中。
- PHP碰到session_start()时开启session会话,会自动检测sessionID
2. session基本使用
- $_SESSION是通过session_start()函数的调用才会定义的,不会直接定义。
- 设置session和读取session
<?php
// 开启session
session_start();
// 设置session
$_SESSION['name'] = 'Mark';
$_SESSION['hobby']=array('sing', 'dump');
// 读取session
var_dump($_SESSION);
- 删除一个session
unset($_SESSION['name']);
- 删除所有session
$_SESSION = array();
3. session配置
- 配置方式
- 在php.ini中配置,全局生效
- 脚本中配置,PHP可以通过
ini_set()
函数来设置项目配置
- 基础配置
- session.name:session名字,保存到cookie中sessionID对应的名字
- session.auto_start:自动开启session,默认关闭
- session.save_handler:session数据的保存方式,默认是文件形式
- session.save_path:session文件默认存储位置
- 常用配置
- session.cookie_lifetime:PHPsessionID在浏览器端对应cookie的生命周期,默认是会话结束
- session.cookie_path:sessionID在浏览器存储之后允许服务器访问的路径(cookie作用范围)
- session.cookie_domain:cookie允许访问的子域
- 垃圾回收配置
- session.gc_maxlifetime:规定session文件的最大生命周期,默认24分钟。
- session.gc_probability:垃圾回收概率因子,默认为1
- session.gc_divisor:垃圾回收概率分母,默认为1000
- 触发几率默认是 1/1000
4. 销毁session
$_SESSION = array();
只会删除数据。销毁session会删除session对应的文件。- 通过
session_destroy()
函数来销毁session。