php session_id 不使用cookie_Cookie 和 Session 机制 (中)

2. SESSION

2.1 什么是Session

Session是为了便于webserver标识、引导用户,而设计的一种会话管理机制。Session通常会记录用户之前浏览过的一些记录、信息或痕迹。Session是基于Cookie来工作的,当浏览器第一次访问服务器时,服务器设置一个id并保存一些相关信息(例如用户登录信息等),并把这个id通过Cookie方式存到客户端,客户端再次和服务器交互时只传这个id,就可以实现维持浏览器和服务器的状态,而这个ID通常是NAME为类似PHPSESSID或JSESSIONID的一个Cookie值。

2.2 Session的传输方式

Session 有四种工作方式:1. 通过URL传递SessionID2. 通过Cookie传递SessionID3. 通过SSL传递SessionID   [略]4. 通过隐藏表单传递SessionID [略]session通常给用户一个PHPSESSION='xxxxxxxx'的键值对来使用户携带凭证访问WEB站点。例如,当用户浏览器不支持Cookie功能时,Session可以通过URL传递SessionID(就是GET传参session值,URL重写添加了PHPSESSID)(URL重写传送session容易导致链接传播泄露用户的个人私密信息)。一般默认情况下,会通过Cookie传递SessionID。以PHP站点为例,可通过编辑'php.ini'文件直接编辑‘session.use_cookies = 1’,使session只通过cookie传输。(这种方法比URL传输方式安全性高)

c51241c101092f9e70ad6ca663140f5d.png

a4ca22a2cef08e028f60a58281f8d726.png

2.5 Session的存储

由于使用的是phpstudy软件,该软件的php.ini中有如下配置:session.save_path="C:\phpStudy\PHPTutorial\tmp\tmp"也就说明了默认的Session文件的存储位置。

d844205572d50d8c759eef018f7ef22d.png

36d9e3fdf5a464ef29602705c0fee73c.png

细心一点会发现Session存储的文件名,就是以sess_'PHPSESSID值'命名的。

d5752ba442ef8a157848fab9bb076d4a.png

当你设置session.gc_maxlifetime = 1440时,第二天你打开你的tmp文件夹,会发现昨天的session文件居然存活到了今天!怎么可能?我不是设置的session.gc_maxlifetime = 1440(24分钟吗)吗?其实,这里php有个机制:GC,garbage collect,垃圾回收。GC并非随时都会被触发执行。GC什么时候会被触发呢?你可以从参数中算一下:session.gc_probability  除以  session.gc_divisor。默认是1 / 100 ,即百分之一。服务器每接受100个来自不同客户的请求包,就会触发一次GC,距最后一次修改时间超过24分钟的session文件就会被销毁删除。你可以在你的站点上多传送一百个请求包,看看过期的session文件是否被销毁了。 这样的机制,是为了避免GC一直启动占用服务器资源。当然,你也可以设置session.gc_probability和session.gc_divisor的参数,改变他们的比值,改变GC被触发的频率。或者,也可以选择不使用php自己默认的session机制,学很多大公司制作的框架,直接使用数据库来管理session文件。

3. 总结

3.1 共同点

Session和Cookie都是为了让http协议有状态而存在;Session通过Cookie工作,客户端[Cookie]传输的SessionID让webserver[Session]能够识别客户端。

3.2 不同点

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。2、cookie不是很安全,可以通过分析存放在本地的cookie并进行cookie欺骗。3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,应当配置回收策略。4、所以建议:将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中

未完待续... ...

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值