PHP中Session ID的实现原理实例分析


Posted in PHP onAugust 17, 2019

本文实例讲述了PHP中Session ID的实现原理。分享给大家供大家参考,具体如下:

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

PHPSESSIONID的生产算法原理如下:

hash_func = md5 / sha1 #可由php.ini配置

PHPSESSIONID = hash_func(客户端IP + 当前时间(秒)+ 当前时间(微妙)+ PHP自带的随机数生产器)

从以上hash_func(*)中的数据采样值的内容分析,多个用户在同一台服务器时所生产的PHPSESSIONID重复的概率极低(至少为百万份之一),设想,但台动态Web Server能到2000/rps已经很强悍了。

另外,黑客如果要猜出某一用户的PHPSESSIONID,则他也必须知道“客户端IP、当前时间(秒、微妙)、随机数”等数据方可模拟。

php.ini配置如下:

; Select a hash function for use in generating session ids.
; Possible Values
;  0 (MD5 128 bits)
;  1 (SHA-1 160 bits)
; This option may also be set to the name of any hash function supported by
; the hash extension. A list of available hashes is returned by the hash_algos()
; function.
; http://php.net/session.hash-function
session.hash_function=0

【PHP session工作原理】

以下以cookie传输PHPSESSID描述。

1. 客户端请求一个php的服务端地址。

2. 服务端收到请求,此次php脚本中包含session_start()。

3. 服务端会生成一个PHPSESSID。(默认session存储方式为session.save_handler=files,文件形式存储。生成的session文件名规则即为sess_PHPSESSID,session文件存在session.save_path中。)

4. 服务端响应首部Response Headers:Set-Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50; path=/。在客户端生成一个cookie保存此PHPSESSID。

5. 此时,客户端的cookie里面包含了PHPSESSID,之后客户端的每次请求首部Request Headers:Cookie:PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50。服务端之后每次接收到客户端的请求就都能根据这个

PHPSESSID来找到服务端的session文件,通过对这个session文件的读写操作即实现了session的超全局变量属性。

如果客户端禁用了cookie,由于无法使用cookie传递PHPSESSID,那么客户端每次请求,服务端都会重新建立一个session文件,而无法通过通过PHPSESSID来重用session文件,所以session也就失效了。

这种情况可以设置session.use_trans_sid来传输PHPSESSID,具体实现方式与cookie的区别就是将PHPSESSID通过HTTP的GET传输。每次请求的地址里面都会补全PHPSESSID参数”url?

PHPSESSID=37vjjasgjdv2ouk1uomhgqkv50”来实现。

【PHPcli模式通过session_id()使用session】

可以通过它来获取当前会话的PHPSESSID,也可以通过它来设置当前的会话PHPSESSID。

PHPcli模式下可以通过设置这个,达到使用session的目的,非常方便。

例如:

<?php
// session_id('vingbrv8m64asth0nhplu9gmb7');
session_start();
$_SESSION[md5(rand(100,999))] = rand(100,999);
var_dump($_SESSION);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP HTML代码串截取代码
Dec 29 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
ubuntu 编译安装php 5.3.3+memcache的方法
Aug 05 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
简单的cookie计数器实现源码
Jun 07 PHP
解决CodeIgniter伪静态失效
Jun 09 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
PHP实现上传图片到 zimg 服务器
Oct 19 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
php桥接模式应用案例分析
Oct 23 PHP
解决php extension 加载顺序问题
Aug 16 #PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 #PHP
Thinkphp5框架实现获取数据库数据到视图的方法
Aug 14 #PHP
php中对象引用和复制实例分析
Aug 14 #PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 #PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 #PHP
PHP命名空间定义与用法实例分析
Aug 14 #PHP
You might like
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
PHP中使用GD库绘制折线图 折线统计图的绘制方法
2015/11/09 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
javascript 变量作用域 代码分析
2009/06/26 Javascript
JQuery index()方法使用代码
2010/06/02 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
2012/07/24 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
vue设置动态请求地址的例子
2019/11/01 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python将多个excel表格合并为一个表格
2021/02/22 Python
python基础之包的导入和__init__.py的介绍
2018/01/08 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
75条笑死人的知乎神回复,用60行代码就爬完了
2019/05/06 Python
简单了解python反射机制的一些知识
2019/07/13 Python
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
行政主管岗位职责
2013/11/18 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
导游词开场白
2015/01/31 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书