php怎么判断是否有session(PHP中Session ID的实现原理实例分析)
php怎么判断是否有session
PHP中Session ID的实现原理实例分析本文实例讲述了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程序设计有所帮助。
原文链接:https://www.cnblogs.com/opensmarty/p/11078439.html
- thinkphp表单提交不到数据(ThinkPHP5.1表单令牌Token失效问题的解决)
- thinkphp5设计权限(Thinkphp5.0 框架视图view的比较标签用法分析)
- php支付系统(php实现的支付宝网页支付功能示例基于TP5框架)
- php日期和时间怎么设置(PHP实现时间日期友好显示实现代码)
- php如何复制数组(php5对象复制、clone、浅复制与深复制实例详解)
- phpstudy使用教程学习(phpStudy 2016 使用教程详解支持PHP7)
- php用什么解压(php解压缩zip和rar压缩包文件的方法)
- php执行超时怎么办(PHP错误提示It is not safe to rely on the system……的解决方法)
- php的底层分析(PHP反射原理与用法深入分析)
- nginx和php怎么结合(php和nginx交互实例讲解)
- php中如何打开文件读文件(PHP通过文件保存和更新信息的方法分析)
- php语法基础知识(PHP中16个高危函数整理)
- OpenLDAP docker使用教程(Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法)
- phpsession登录功能(php实现session共享的实例方法)
- php运行机制与原理(PHP进阶学习之类的自动加载机制原理分析)
- php 常见的三种缓存(PHP进阶学习之垃圾回收机制详解)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
- 苹果15价格(苹果15价格512g官网)
- 春节放假几天(春节放假几天2023法定几天)
- 今天 3月13日,31年前,一个英雄少年感动了中国(今天3月13日31年前)
- 你好,新成理人丨成都理工大学2019级新生开学典礼隆重举行(新成理人丨成都理工大学2019级新生开学典礼隆重举行)
热门推荐
- sql server日期查询语句(SQL Server中查询结果超出了查询时间范围解决方法)
- sql server语法大全(SQL Server 全文搜索功能介绍)
- vsftpd详细教程(编译安装 vsFTP 3.0.3的详细解析)
- sql多条件查询汇总语句(SQL判断语句用法和多表查询)
- js获取微信版本号
- javascript作用域实例(JavaScript defineProperty如何实现属性劫持)
- JavaScript实现网页版贪吃蛇游戏(JavaScript实现网页版贪吃蛇游戏)
- python提取字符串中的正则表达式(python3正则提取字符串里的中文实例)
- mysql分区表的优缺点(MySQL数据表分区策略及优缺点分析)
- mysql插入数据错误代码(教你解决往mysql数据库中存入汉字报错的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9