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 相关文章推荐
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
深入密码加salt原理的分析
Jun 06 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
浅析PHP微信支付通知的处理方式
May 25 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
May 13 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
PHP中header用法小结
May 23 PHP
Laravel实现自定义错误输出内容的方法
Oct 10 PHP
PHP静态延迟绑定和普通静态效率的对比
Oct 20 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
WINXP下apache+php4+mysql
2006/11/25 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
javascript间隔定时器(延时定时器)学习 间隔调用和延时调用
2014/01/13 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
详解template标签用法(含vue中的用法总结)
2021/01/12 Vue.js
python fabric使用笔记
2015/05/09 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
对python csv模块配置分隔符和引用符详解
2018/12/12 Python
Python中Numpy ndarray的使用详解
2019/05/24 Python
Python 控制终端输出文字的实例
2019/07/12 Python
python实现大量图片重命名
2020/03/23 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
急诊科护士自我鉴定
2013/10/14 职场文书
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
身边的榜样活动方案
2014/08/20 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书