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基础知识:类与对象(5) static
Dec 13 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
在PHP中PDO解决中文乱码问题的一些补充
Sep 06 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
Feb 22 PHP
php中大括号作用介绍
Mar 22 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
Mar 28 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
Jun 30 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
Oct 30 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
第七节 类的静态成员 [7]
2006/10/09 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
YII实现分页的方法
2014/07/09 PHP
实现PHP框架系列文章(6)mysql数据库方法
2016/03/04 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
中止javascript执行的方法
2014/02/14 Javascript
JavaScript基本数据类型及值类型和引用类型
2015/08/25 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
js推箱子小游戏步骤代码解析
2018/01/10 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
2019/01/15 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
tensorflow自定义激活函数实例
2020/02/04 Python
详解python with 上下文管理器
2020/09/02 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
PyCharm 光标变成黑块的解决方式
2021/02/06 Python
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
旷课检讨书大全
2014/01/21 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL