Session的工作方式


Posted in PHP onOctober 09, 2006

下面我们来看一下Session是如何工作的。不知你是否知道通过Cookie来实现身份认证的吧。首先生成一个独一无二的Cookie作为用户身份的标志,并在数据库中进行注册。然后通过用户传递来的Cookie和数据库中注册的Cookie进行对照以确定用户的身份。
  Session的工作原理也是这样。
  首先,PHP为建立Session的用户产生一个独一无二的字符串,用来标志这个用户的session。一般将这个字符串称作Session Id。然后“sess”+Session Id为文件名(例如一个Session ID为111,那么文件名为sess_111)在服务器的文件系统中建立一个文件,在文件中保存用户在Session所定义的全局变量的变量名和值。然后再将Session Id作为一个名为PHPSession的Cookie保存在用户端的文件系统中。
  然后,当用户再次连接服务器访问一个PHP脚本时,PHP从用户发来的PEESession这个Cookie中得到用户所在Session的Session Id,并根据Session Id从服务器的文件系统中保存Session信息的文件。最后从这个文件中读出用户在上次连接时所设置的全局变量的值。
  因此,我们可以看到Session的工作原理和我们上一节所介绍的身份认证的工作原理是一样的。所不同的只是Session将信息保存在了服务器的文件系统中,而我们将信息保存在了数据库中。当然使用Session好处就是数据的保存和获取是由PHP自动完成的,而直接使用Cookie的话就需要自己动手进行数据的保存和获取。
  Session利用Cookie的身份标志功能,将用户在浏览网站时需要保存的信息保存在服务器上。这样Session既克服了HTTP协议的缺陷,又防止了信息的泄漏,而且方便了编程者的使用,是一个非常好的解决方案。不过,Session的功能只有PHP4支持,PHP3是不支持Session的。因此使用PHP3进行网站构建的读者只能采用直接使用Cookie的方式。

PHP 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
PHP实现多进程并行操作的详解(可做守护进程)
Jun 18 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
php将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
php上传文件并存储到mysql数据库的方法
Mar 16 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
PHP快速排序quicksort实例详解
Sep 28 PHP
PHP实现的多进程控制demo示例
Jul 22 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
用Flash图形化数据(一)
Oct 09 #PHP
PHP中Session的概念
Oct 09 #PHP
虚拟主机中对PHP的特殊设置
Oct 09 #PHP
用Flash图形化数据(二)
Oct 09 #PHP
用php来检测proxy
Oct 09 #PHP
如何将一个表单同时提交到两个地方处理
Oct 09 #PHP
PHP制作图型计数器的例子
Oct 09 #PHP
You might like
php中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
PHP使用mysqli同时执行多条sql查询语句的实例
2019/03/22 PHP
PHP如何通过带尾指针的链表实现'队列'
2020/10/22 PHP
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
python实现的简单猜数字游戏
2015/04/04 Python
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
基于python框架Scrapy爬取自己的博客内容过程详解
2019/08/05 Python
Django实现文件上传下载功能
2019/10/06 Python
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
工地资料员岗位职责
2013/12/31 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
python套接字socket通信
2022/04/01 Python