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 自定义上传文件名的实现方法)
- linux如何安装php7.1.5环境(vmware linux系统安装最新的php7图解)
- php中钩子的理解与实例教程(php中钩子hook的原理与简单应用demo示例)
- thinkphp5.1请求流程(ThinkPHP5.0框架使用build 自动生成模块操作示例)
- php关注公众号发送消息(php实现QQ小程序发送模板消息功能)
- centos安装php5.6(Centos7 Yum安装PHP7.2流程教程详解)
- php创建多个文件(PHP实现单文件、多个单文件、多文件上传函数的封装示例)
- php实现异步操作(php提供实现反射的方法和实例代码)
- dedecms兼容模式(DedeCMS 验证码不正确的解决方法php配置问题)
- php redis配置(php+redis实现消息队列功能示例)
- php不能用mysql(php写入mysql中文乱码的实例解决方法)
- php对象和类(PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例)
- php用什么解压(php解压缩zip和rar压缩包文件的方法)
- php最好的探针(php探针不显示内存解决方法)
- php微信支付流程(PHP实现微信退款的方法示例)
- php开发详细步骤(php源码的安装方法和实例)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
- 涉及3条地铁线路 成都这4座轨道交通站点有新名字了(涉及3条地铁线路)
- 来了 成都轨道交通5条线路刷新 进度条(成都轨道交通5条线路刷新)
- 一部手机两套系统 OPPO Find X3的正确打开方式你知道吗(一部手机两套系统)
- OPPO用户看过来 汇总几个春节实用技巧,轻松搞定多设备联动玩法(汇总几个春节实用技巧)
热门推荐
- js数组的sort排序
- innodb运行内存(详细了解 InnoDB 内存结构及其原理)
- 深入理解php 变量(不常用但很实用的PHP预定义变量分析)
- python 常用模块函数(Python OOP类中的几种函数或方法总结)
- tomcat启动慢什么原因(Tomcat服务器响应过慢解决方案)
- 如何用iis7.5设置网站(IIS .7z文件支持下载的添加方法)
- dedecms循环栏目(dedecms 栏目列表分页链接优化)
- smartbattery插件正确使用方法(Smarty模板配置实例简析)
- dedecms标题在哪改(织梦DEDECMS文章拼音命名规则时去掉id的方法)
- 安全进入docker容器的方法(使用docker部署一个简单的c/c++程序的方法)