Jan 10

PHP Sessions分析与常见问题解决方案 夜晚

, 08/01/10 00:26 , 技术开发 » PHP , 评论(0) , 引用(0) , 阅读(5843) , Via 本站原创 | |
最近在做php5.2x,遇到了不少关于sessions设置或使用错误,造成的不便。另外,也有点概念模糊了。
特此,整理相关原理与问题的解决办法。session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做Array,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://...../xxx;jsessionid=xxx;另一种是作为查询字符串附加在URL后面,表现形式为http://...../xxx?sessionid=xxxx这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。
URL 中的参数 PHPSESSID 就是 Session ID了,我们可以使用 $_GET 来获取该值,从而实现 Session ID 页面间传递。
Array
Array
一种误解"只要关闭浏览器,session就消失了"。Array程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。
正因为关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。
关于Sessions在PHP中的使用:
 启动 Session 会话,并创建一个 $admin 变量:
Array
执行完这个程序后,我们可以到系统临时文件夹找到这个 Session 文件,一般文件名形如:sess_4c83638b3b0dbf65583181c2f89168ec,后面是 32 位编码后的随机字符串。
admin|N; 一般该内容是这样的结构:
Array
并用分号隔开每个变量。有些是可以省略的,比如长度和类型。
Array
Array
  如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。

  手动设置 Session 的生存期:
Array
Session 还提供了一个函数 Array来设置 Session 的生存期的,Array:
Array
Array,Array 就提供了这样一个功能。Array可以将 Session 存放目录指向一个不能通过 Web 方式访问的文件夹,当然,该文件夹必须具备可读写属性。
Array
下面列举一些最近遇到相关的错误与解决方案。
内文分页: [1] [2]

作者:@Everyday NetLog
地址:http://log.zhoz.com/read.php?152
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

Tags:
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]