php中会话技术,php_会话技术 — session

session:将会话数据存储在服务器端,并且让数据能够识别浏览器的一种技术。

原理图:

df4d75442673b0c52e9cb1effe54b2fe.png

通过分析原理图:

1)会在服务器开辟SESSION会话数据区保存会话数据;

2)开辟会话数据区后,将会生成一个唯一的PHPSESSID,并且返回给浏览器作为一个COOKIE数据。

session的使用 -- 基本操作

1.要使用session,必须先开启SESSION机制,使用session_start()函数

#开启session

session_start();

2.增删改查操作

我们可以通过操作$_SESSION数组变量来增删改查SESSION数据

bbcde117970d982b5f953890563f1df6.png

我们还可以通过配置php.ini中session.auto_start配置项来开启SESSION机制。默认情况下,配置的值为0,表示不自动开启,我们可以修改为1,来开启自动开启SESSION机制。

(项目中不推荐使用这种方式,我们并不是所有程序页面都需要使用SESSION数据,什么时候需要就什么时候开启)

$_SESSION变量和SESSION会话数据区的关系

1814544b236a6229fcb2192a63c801a4.png

通过分析原理图:

1)会话数据存储在服务器的会话数据区中;

2)Session_start时,如果没有会话数据区将会开辟一个新的会话数据区;如果有,则找到该数据区,将其中的数据取出来初始化给$_SESSION变量。(没有的时候初始化为空数组)

3)只有当程序运行结束时,才会将$_SESSION中的数据保存到会话数据区。

4)我们程序将自动通过PHPSESSID区查找对应的会话数据区。

销毁SESSION数据(区)操作

session_destroy();

注意:session_destroy销毁的是SESSION会话数据区,并没有直接操作到$_SESSION。

SESSION属性的设置

本质上是控制PHPSESSID来达到控制整个SESSION会话数据区中所有会话数据的属性。

PHPSESSID不是我们手动创建的,而是PHP自动帮我们创建的,如果我们要修改PHPSESSID这条COOKIE数据的属性,我们需要通过PHP来进行相关的控制,而不是通过setcookie函数来进行相关的设置。

有效期

默认值为0,表示一个会话周期。

一个会话周期:表示到关闭浏览器为止为一个会话周期。

有效路径

区别于普通COOKIE数据,PHPSESSID默认的有效路径为全站有效。

有效域

默认的是当前域有效。

是否安全传输

默认的是http和https都能访问。

HTTPONLY

这个属性对SESSION数据无意义

对应的在php.ini中的配置项为,如下图:

ba1807931142defaf6187b8bf03053cc.png

b7439f315d3d48c1d27a85af4fc6bced.png

1)我们通过直接配置,不方便(可能经常要找运维人员); 2)另一个也不符合我们个性化的管理(一台服务器可能部署多个网站,修改配置将会影响到所有网站)

所有PHP还支持我们在程序中自定义控制属性。通过函数session_set_cookie_params函数来进行设置。参数对应着PHPSESSID这个COOKIE的五个属性。

e38cdddca1776e6ce7cbf99d08f0a4d4.png

TIPS:这个函数在指定第一个有效期参数时,有可能需要在不同环境增加或者减少时间戳来测试,这个是该函数的一个小bug。

f8cd75f86b713a515b8d00cbd927332b.png

禁用COOKIE后如何使用SESSION

我们可以通过php.ini文件的相关配置来开启另一种使用SESSION的机制。

下面这个配置项默认的配置值为1,表示只适用COOKIE方式实现SESSION。

65654b37562b969b3a8658f2cb335543.png

下面这个配置默认值为0,表示不允许通过传输的方式传递PHPSESSID的值。

3462376f0db6b3b58c09f679f6a631fa.png

我们可以将session.use_only_cookie设置为0并且将session.use_trans_sid为1实现禁用COOKIE后依然能够使用SESSION。

91454a3b7571955badce197553e25925.png

550798c0336a772c5bde24e39c6bbacf.png

SESSION的垃圾回收机制

有时候,我们的PHPSESSID这个COOKIE消失以后,SESSION会话数据区依然存在。

PHP提供一个垃圾回收机制,专门针对清理这类型的无效数据区。

实现方式

我们需要在php.ini中进行相应的配置。

b92dc59e5ad4ee01cd5b1daf5c00911e.png

PHP将会根据gc_maxlifetime判断会话数据区是否已经失效(如果在这个指定的时间内这个会话数据区依然没有被访问过,那么PHP将认为这个会话数据区可能已经失效),如果失效,那么PHP将会以一个概率值来清除会话数据区,这个概率就是gc_probability除以gc_divisor!

原文:http://www.cnblogs.com/bk233/p/7388972.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值