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实现WEB动态网页静态
Oct 09 PHP
一个MYSQL操作类
Nov 16 PHP
关于Appserv无法打开localhost问题的解决方法
Oct 16 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
解析php dirname()与__FILE__常量的应用
Jun 24 PHP
PHP图片上传代码
Nov 04 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
session 加入redis的实现代码
Jul 15 PHP
php 解决扫描二维码下载跳转问题
Jan 13 PHP
PHP number_format函数原理及实例解析
Jul 14 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 和 MySQL 基础教程(三)
2006/10/09 PHP
图书管理程序(三)
2006/10/09 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
Extjs中常用表单介绍与应用
2010/06/07 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
python比较2个xml内容的方法
2015/05/11 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
Python创建字典的八种方式
2019/02/27 Python
pytorch 模型可视化的例子
2019/08/17 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
政协调研汇报材料
2014/08/15 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书