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实现原理相关推荐

  1. Cookie和Session的作用,区别和各自的应用范围,Session工作原理

    Cookie和Session的作用与区别 Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请 ...

  2. 修改数据包欺骗服务器,Fiddler协议捕获编辑工具与Session欺骗原理详解

    今天Kitty主要与大家分享Fiddler抓包工具与协议捕获编辑工具来与大家讲解Session欺骗原理过程,咱们主要通过Fiddller协议捕获工具来对比HTTPWatch两款工具之间的差别,最主要的 ...

  3. COOKIE和Session的原理及异同

    COOKIE和Session的原理及异同 1. cookie的创建和读取 cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的w ...

  4. 服务器端会话技术Session|| Session的原理||Session的细节||session的钝化session的活化||session的特点||session与Cookie的区别

    Session 1. 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中.HttpSession 2. 快速入门:     1. 获取HttpSession对象:   ...

  5. 从@EnableRedisHttpSession谈谈Spring Session实现原理

    一.EnableRedisHttpSession使用 添加依赖 <!-- spring session的依赖 --> <dependency><groupId>or ...

  6. asp.net中session的原理及应用

    Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Se ...

  7. 理解Session实现原理及安全运用

    ##实现原理## java的web容器都实现了session机制,实现的逻辑思想都是一致的,但是具体方案可能会存在一定差异,这里我以tomcat容器为例,探讨下session实现的机制. 下图是tom ...

  8. Session的原理,大型网站中Session方面应注意什么?

    一.Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法(通常用于pc端网站保持登录状态,手机端通常会使用token方式实现),存储在服务端. Cookie是在客户端保 ...

  9. 面试官:请你说一说Http Session的原理及应用?

    选自于:http://www.2cto.com/kf/201206/135471.html 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加 ...

最新文章

  1. 关键词提取_NLP 关键词 提取 实战 案例
  2. JavaScript —— this、闭包、原型、异步
  3. android 后退按钮,如何在android中处理Search View的后退按钮
  4. springcloud集成sleuth
  5. 百度云文字识别OCR【表格】
  6. jxls对比_结合JXLS和POI技术开发Web报表
  7. 无线路由器无线桥接(一)
  8. 华为交换机密码遗失怎么办?华为交换机密码恢复方法
  9. Blue Coat 庖丁解牛 云安全势在必行
  10. 方差、标准差、均方差、均方根值(RMS)、均方根误差(RMSE)
  11. Linux安装rsync命令失败,rsync 常见错误与解决方法整理
  12. 计算机开机键英语字母,电脑开机黑屏显示英文字母
  13. html好友页面,好友列表.html
  14. oracle spa性能测试,9i升级到11g用SPA做性能测试
  15. 私有云、公共云和混合云的安全性差异和优缺点
  16. c语言 标准多线程库,关于C语言多线程pthread库的功能描述
  17. ArcGIS 实验理论基础二十五 地图符号的制作与应用
  18. pairproject总结和结果
  19. FeelDesk工单系统介绍
  20. SCT2280,一款17V 8A输出同步降压DCDC转换器

热门文章

  1. 信号角度分析评估因子表现(无限资金回测模型)
  2. 这个工具太好用了,彻底摆脱了数据IT“天天取数”的噩梦
  3. 避坑!用大数据告诉你,那些被淘汰的公司,都有哪些特征?
  4. 只靠可视化大屏,做不了数字化,阿里总监总结3点,你做到了几个
  5. Box2D——入门教程
  6. django3与vue3本地搭建
  7. windows下客户端连接上马上会断开连接_Tunneller VS DCOM,稳定性更高的连接!
  8. python下载大文件mp4_Python 下载 m3u8 格式视频
  9. php 没有权限,PHP出现操作文件没有权限怎么办?
  10. 分享一个stm32的OLED驱动,实现图像平移滚动滑动,esp8266-wifi物联网远程开关天气,开源代码电路原理图