### 什么是session
- session 被称为会话,主要是保持某个访问者的数据
- 客户端访问服务器,通过session_id获取自己存储在服务器端的数据
- session_id通过两种方式传递给服务端:URL,cookie
### session开启
- php.ini文件 session.auto\_start设置为1,则自动开启session或手动开启 调用session_start()函数
- 开启后,先初始化$_SESSION。(通过客户端传递过来的session_id,读取相应的session文件里面的内容,在将反序列化之后,赋值给$_SESSION超全局数组。第一次访问若没有session_id,则$_SESSION为空数组)
- session_start()这个阶段还会判断哪些session文件已经过期,然后再触发垃圾回收机制进行回收
- session_start()之后,脚本运行周期内,php只是对$_SESSION这个超全局数据进行操作,并没有影响session文件,除非执行了session_destroy()操作。
- 脚本执行结束阶段,才会对session文件进行操作,也就是把$_SESSION数组中的数据序列化然后存储到session文件中
- 在会话开启后,对于基于文件的会话数据存储器而言,在会话开始的时候会给数据文件加锁,直到php脚本执行完毕,或者显示的调用session_write_close()来保存会话数据,在此期间,其他脚本不可以访问同一个会话数据文件
### session配置
- session.cookie_lifetime 已秒数指定发送到浏览器的cookie的什么周期,值为0表示‘ 直到关闭浏览器
- session.save_handler = redis session的存储器,默认是 file
- session.save_path = "tcp://127.0.0.1:6379" session的存储路径
- session.gc_probability = 1; 清楚无效session的基率
- session.gc_divisor = 5000; 启动垃圾回收程序的概率。概率计算公式:session.gc_probability / session.gc_divisor
- session.gc_maxlifetime session文件过期时间。超过这个时间没有使用session将视为垃圾。将在下次垃圾回收时删除。
### 自定义的session存储
- 先修改配置文件 `ini_set('session.save_handler', 'use')`
- 自定义session存储层
```
参数1:表示session_strat的时候处理的函数
参数2:表示脚本结束的时候处理的函数
参数3:读取session数据表中的数据函数
参数4:向session数据表中写入数据函数
参数5:销毁session数据表中的数据函数
参数6:session过期之后的处理函数
session_set_save_handler($open,$close,$read,$write,$destroy,$gc);
//回调函数
function open{
//初始化连接数据库
}
function close{
return true;
}
//读取session数据表中的数据
//系统会自动把客户携带过来的session_id传递给read里面
function read($session_id){
//执行查询操作
//return 返回查询的结果
}
//在session数据表中写入数据
//当$_SESSION['name']='zhangsan';的操作时,就会把数据写入到session表中
function write($session_id,$session_content){
//执行插入操作
}
//当执行session_destroy的操作是,会执行destroy函数
//销毁session,系统自动会把sessionid传递给函数
function destroy($sessionid){
//执行删除操作
//return 返回删除的结果
}
//当session_start()的时候判断哪些session过期了,会自动把session数据的有效期传递过来。
function gc($max_lifetime){
$time = time-$max_lifetime;
然后和数据库中的最后一次访问的时间作比较,要是过期了就执行删除操作
}
```
- linux 基础
- ln 链接
- linux 环境变量
- linux 进程查看
- nginx
- redis
- redis 安装
- php 底层原理
- php源码编译安装
- phpize文件
- php命令行
- php7 新特性
- php7 变量
- php7 生命周期
- php sapi运行模式
- php 内存管理
- php 运行机制和Zend虚拟机
- php垃圾回收
- php 基础
- php.ini
- php函数
- 面向对象
- php 文件上传
- ob缓冲和页面静态化
- php中的session
- php cURL扩展
- composer 应用
- php 错误和异常
- thinkphp
- tp6容器和依赖注入
- tp6 的服务
- tp6事件
- tp6 多应用
- tp6路由
- tp6 cache
- tp6 request
- tp6 中间件
- tp6 response
- tp6 Db
- 备忘录
- 数据库表