php session实现原理
SESSION的实现中采用COOKIE技术,SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE; 在服务器端保存其他session变量,比如session_name等等。当用户请求服务器时也把session_id一起发送到服务器,通过 session_id提取所保存在服务器端的变量,就能识别用户是谁了。同时也不难理解为什么SESSION有时会失效了。
当客户 端禁用COOKIE时(点击IE中的“工具”?“Internet选项”,在弹出的对话框里点击“安全”?“自定义级别”项,将“允许每个对话 COOKIE”设为禁用),session_id将无法传递,此时SESSION失效。不过php5在linux/unix平台可以自动检查cookie 状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此。
php session原理2007-08-17 13:24众所周知,http协议是一个无状态协议,简单来说就是,web服务器是不知道现在连接上来的人到底是哪个人,为了满足选择性发送信息的需求, 在http的基础上做了很多扩展来达到这个目的,如数字签名、cookie、session等。
web服务器或者web程序如何能够知道现在连接上来的是谁?要解决这个问题,首先需要在服务器端和客户端建立一一对应关系,下边我通过抓取http的内容来说明这种对应关系是如何建立的。
我使用的是一个叫做httplook的http包嗅探工具,然后在本地web服务器的根目录下建立一个叫test.php的文件,地址是:http://localhost/test.php,一切就绪以后我通过浏览器反复打开这个页面。
<?php
session_start();
if (isset($_SESSION['test_sess'])){
$_SESSION['test_sess']++;
}else{
$_SESSION['test_sess'] = 0;
}
echo $_SESSION['test_sess'];
?>;
以下是前两次向服务器发出的信息及服务器返回的信息
引用:原帖由 "第一次请求服务器" 发表:
GET /test.php HTTP/1.1
Accept: */*
Referer: http://localhost/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive
引用:原帖由 "服务器第一次返回" 发表:
HTTP/1.1 200 OK
Date: Fri, 26 Aug 2005 07:44:22 GMT
Server: Apache/2.0.54 (Win32) SVN/1.2.1 PHP/5.0.4 DAV/2
X-Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 1
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
Content-Language: Off
引用:原帖由 "第二次请求服务器" 发表:
GET /test.php HTTP/1.1
Accept: */*
Referer: http://localhost/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322)
Host: localhost
Connection: Keep-Alive
Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
引用:原帖由 "服务器第二次返回" 发表:
HTTP/1.1 200 OK
Date: Fri, 26 Aug 2005 07:44:23 GMT
Server: Apache/2.0.54 (Win32) SVN/1.2.1 PHP/5.0.4 DAV/2
X-Powered-By: PHP/5.0.4
Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 1
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
Content-Language: Off
仔细对比这些输出,第二次请求比第一次请求多出来的就是:
Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3
这个header将会向服务器发送一个cookie信息,告诉服务器我有一个cookie,名字叫PHPSESSID,内容是bmmc3mfc94ncdr15ujitjogma3。
这个cookie是怎么来的呢?看第一次服务器返回的信息里边有:
Set-Cookie: PHPSESSID=bmmc3mfc94ncdr15ujitjogma3; path=/
这是服务器向客户端浏览器写一个cookie,名字是PHPSESSID,值是bmmc3mfc94ncdr15ujitjogma3,这个值实际就是所谓的session_id。
继续看第二次向服务器发出的请求,仍然向服务器发送了PHPSESSID这个cookie
可以得到以下结论:
1、只要使用了session,就会通过cookie的方式向客户端浏览器发送session
2、每次向服务器发出请求的时候,本地浏览器会把cookie附带在请求信息中
说到这里,服务器端和客户端如何通过session做到一一对应的答案就很清楚了,明白了这个道理,对于使用session有很大帮助,请细细体会。
转载于:https://www.cnblogs.com/tudouya2013/p/3737361.html
php session实现原理相关推荐
- Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Cookie和Session的作用与区别 Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请 ...
- 修改数据包欺骗服务器,Fiddler协议捕获编辑工具与Session欺骗原理详解
今天Kitty主要与大家分享Fiddler抓包工具与协议捕获编辑工具来与大家讲解Session欺骗原理过程,咱们主要通过Fiddller协议捕获工具来对比HTTPWatch两款工具之间的差别,最主要的 ...
- COOKIE和Session的原理及异同
COOKIE和Session的原理及异同 1. cookie的创建和读取 cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的w ...
- 服务器端会话技术Session|| Session的原理||Session的细节||session的钝化session的活化||session的特点||session与Cookie的区别
Session 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession 2. 快速入门: 1. 获取HttpSession对象: ...
- 从@EnableRedisHttpSession谈谈Spring Session实现原理
一.EnableRedisHttpSession使用 添加依赖 <!-- spring session的依赖 --> <dependency><groupId>or ...
- asp.net中session的原理及应用
Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Se ...
- 理解Session实现原理及安全运用
##实现原理## java的web容器都实现了session机制,实现的逻辑思想都是一致的,但是具体方案可能会存在一定差异,这里我以tomcat容器为例,探讨下session实现的机制. 下图是tom ...
- Session的原理,大型网站中Session方面应注意什么?
一.Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法(通常用于pc端网站保持登录状态,手机端通常会使用token方式实现),存储在服务端. Cookie是在客户端保 ...
- 面试官:请你说一说Http Session的原理及应用?
选自于:http://www.2cto.com/kf/201206/135471.html 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加 ...
最新文章
- 关键词提取_NLP 关键词 提取 实战 案例
- JavaScript —— this、闭包、原型、异步
- android 后退按钮,如何在android中处理Search View的后退按钮
- springcloud集成sleuth
- 百度云文字识别OCR【表格】
- jxls对比_结合JXLS和POI技术开发Web报表
- 无线路由器无线桥接(一)
- 华为交换机密码遗失怎么办?华为交换机密码恢复方法
- Blue Coat 庖丁解牛 云安全势在必行
- 方差、标准差、均方差、均方根值(RMS)、均方根误差(RMSE)
- Linux安装rsync命令失败,rsync 常见错误与解决方法整理
- 计算机开机键英语字母,电脑开机黑屏显示英文字母
- html好友页面,好友列表.html
- oracle spa性能测试,9i升级到11g用SPA做性能测试
- 私有云、公共云和混合云的安全性差异和优缺点
- c语言 标准多线程库,关于C语言多线程pthread库的功能描述
- ArcGIS 实验理论基础二十五 地图符号的制作与应用
- pairproject总结和结果
- FeelDesk工单系统介绍
- SCT2280,一款17V 8A输出同步降压DCDC转换器
热门文章
- 信号角度分析评估因子表现(无限资金回测模型)
- 这个工具太好用了,彻底摆脱了数据IT“天天取数”的噩梦
- 避坑!用大数据告诉你,那些被淘汰的公司,都有哪些特征?
- 只靠可视化大屏,做不了数字化,阿里总监总结3点,你做到了几个
- Box2D——入门教程
- django3与vue3本地搭建
- windows下客户端连接上马上会断开连接_Tunneller VS DCOM,稳定性更高的连接!
- python下载大文件mp4_Python 下载 m3u8 格式视频
- php 没有权限,PHP出现操作文件没有权限怎么办?
- 分享一个stm32的OLED驱动,实现图像平移滚动滑动,esp8266-wifi物联网远程开关天气,开源代码电路原理图