西固网站建设平台网站建设设计原则
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。 
