PHP(13)会话技术——session技术

SESSION基本使用

SESSION原理

Session与浏览器无关,但是与Cookie有关。
1、PHP碰到session_start()时开启session会话,会自动检测sessionID
a)如果Cookie中存在,使用现成的
b)如果Cookie中不存在,创建一个SessionID,并通过响应头以Cookie形式保存到浏览器上。
2、初始化超全局变量$_SESSION为一个空数组
3、PHP通过sessionID去指定位置(session文件存储位置)匹配对应的文件
a)不存在该文件:创建一个sessionID命名文件
b)存在该文件:读取文件内容(反序列化),将数据储存到$_SESSION中
4、脚本执行结束,将$_SEESION中保存的所有数据序列化储存到sessionID对应的文件中

设置SESSION信息

在这里插入图片描述
在这里插入图片描述
启用session,任何时候都需要开启session(脚本使用到$_SESSION就需要开启,仅一次即可)
$_SESSION需要使用session_start()函数的调用才会定义的,没有直接定义
在这里插入图片描述
在这里插入图片描述

如果想存储数据到session中,那么只要不断给$_SESSION数组添加元素即可
在这里插入图片描述

读取SESSION信息

$_SESSION就是一个数组,存储什么,

在这里插入图片描述
会话技术的本质是为了实现跨脚本共享数据:在一个脚本中定义数据,在另外一个脚本中保存数据

删除SESSION信息

删除session就是将session数据清理掉($_SESSION拿不到)
删除一个session
unset($_session[‘要删除的数据’])
在这里插入图片描述
删除全部SESSION信息
删除全部数据就是让$_SESSION变成一个空数组
在这里插入图片描述
注意这样只是删掉了session数据并没有删除储存文件。

session相关配置

1)session.name:session名字,保存到COOKIE中session对应的名字
在这里插入图片描述

2)session.auto_start:是否自动开启session(无需手动session_start()),默认关闭
在这里插入图片描述

3)session.save_handler:session数据的保存方式,默认是文件形式
在这里插入图片描述

4)session.save_path:session文件默认储存位置
在这里插入图片描述
使用系统的文件夹存储不安全,需要指定对应存储路径
5)session.cookie_lifetime:PHPsessionid在浏览器端对应COOKIE的生命周期,默认是会话结束。
在这里插入图片描述
6)session.cookie_path:sessionID的作用范围
在这里插入图片描述
7)session.cookie_domain:COOKIE允许访问的子域(COOKIE可以跨子域)
在这里插入图片描述

配置方式

1)php.ini:全局设置,修改php.ini中的配置项
2)脚本中配置:PHP可以通过ini_set函数来在运行中设定某些配置项(只会对当前运行的脚本有效),把这种配置称之为项目级。

在这里插入图片描述

销毁SESSION

Session删除是指删除session数据,$_session中看不到而已;销毁session是指删除session对应的session文件。
系统提供了一个函数:session_destroy(),会自动根据session_start得到的sessionID去找到指定的session文件,并把其删除。
在这里插入图片描述

垃圾回收机制

session会话结束后,session文件不会自动清除,如果每天有大量session文件产生但是又都是失效的,会增加服务器的压力和影响session效率。
垃圾回收,是指session机制提供了一种解决垃圾session文件的方式:给session文件指定周期,通过session文件最后更改时间与生命周期进行结合判定,如果已经过期则删除对应的session文件,如果没有过期则保留。这样就可以及时清理无效的僵尸文件,从而提高空间利用率和session工作效率。

1、任何一次session开启,session都会尝试去读取session文件
2、读取session文件后,有可能触发垃圾回收机制
3、垃圾回收机制会自动读取所有session文件的最后编辑时间,然后加上生命周期(配置文件)与当前时间进行比较
a)过期:删除
b)有效:保留
垃圾回收参数设置
1)session.gc.maxlifetime=1440:规定的session文件最大的生命周期是1440秒,24分钟
2)session.gc,probability=1:垃圾回收概率因子(分子)
3)session.gc.divisor=1000:垃圾回收概率分母

默认的触发概率是1/1000

禁用COOKIE后如何使用SESSION

session技术需要利用到cookie技术来保存sessionid,从而使得PHP能够在跨脚本的时候使用sessionid,从而访问同一个session文件。

解决思路:最终让session——start在开启之前拿到原来的sessionid(另外一个脚本的)

在PHP中,想要解决没有COOKIE也实现SESSION的方式有两种:

**方案1:**可以利用PHP提供的session函数:session_id和session_name来获得和设置sessionid或者name从而解决session_start长生新sessionid的情况(手动操作)。
1)获取sessionID和名字
在这里插入图片描述
在这里插入图片描述
2)想办法将数据传递给另外一个脚本:表单传值(URL或者FORM表单)
在这里插入图片描述
3)在需要使用session的脚本中先接受数据
在这里插入图片描述
4)阻止session_start产生新的ID,告诉它已经存在了
在这里插入图片描述
**方案2:**可以利用session集中已经提供的解决方案自动操作(配置)
原因1:默认session配置只允许使用COOKIE保存sessionID:cookie_only
原因2:默认关闭了其他能够传输数据的方式,只保留了COOKIE

1、修改PHP配置文件,开启其他方式传输session_id,关闭只允许cookie传输session
在这里插入图片描述
在这里插入图片描述
2)一旦配置开启,PHP会自动将session和session名字在其他位置绑定数据,同时还会在session_start的时候,考虑其他方式传递(表单)的数据,而不是只有COOKIE
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到php自动完成了获取sessionid,通过表单传输sessionid,并自动引入sessionid。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值