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中使用CURL伪造来路抓取页面或文件
May 04 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
php导出word格式数据的代码实例
Nov 25 PHP
php设置静态内容缓存时间的方法
Dec 01 PHP
CodeIgniter删除和设置Cookie的方法
Apr 07 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
WordPress开发中用于获取近期文章的PHP函数使用解析
Jan 05 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
laravel5.2表单验证,并显示错误信息的实例
Sep 29 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
PHP的加密方式及原理
2012/06/14 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
python 实现删除文件或文件夹实例详解
2016/12/04 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
Python中zip函数如何使用
2020/06/04 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
python爬取天气数据的实例详解
2020/11/20 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
总经理秘书工作职责
2013/12/26 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
毕业生自荐信如何写
2014/03/24 职场文书
公务员考察材料
2014/12/23 职场文书
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技