PHP
中 session
全面教程
一、session
概述
session 是什么,刚开始我也不明白,非专业词典翻译为会议,会议期。直到接触 asp 后才知道 session
是干什么的,有什么用。
作个不太恰当的比喻吧(虽然不恰当,但意义却是一样的),session 就好象你和你女友(或妻子)之间的
感情似的,session
是你和网站之间的感情。
session 在 WEB 技术中占有非常重要的份量。由于网页是一种无状态的连接程序,因此你无法得知用户的
浏览状态。因此我们必须
通过 session 记录用户的有关信息,以供用户再次以此身份对 web 服务器提供要求时作确认,例如,我们
在某些网站中常常要求用户登录,
但我们怎么知道用户已经登录了呢,如果没有 session 的话,登录信息是无法保留的,那岂不要让用户在
每一页网页中都要提供
用户名和密码。
当然,session
不光用于用户身份认证功能,还可能用于其它方面,以后我们会提到的。
session 用中文来解释就是会话期。一个会话期开始于用户输入一个站点的网址时,结束于他离开这个站
点时。
session 最早出现在动态脚本语言 Active Server Pages 中,它的功能之强大,是一句话无法说清楚的。
当 php 还在 3.0 版本时,session 是它永远的痛。虽然 php 具有执行速度快,使用灵活,功能强大等优点,
但因为 session 的问题,使很多站点的开发放弃了 php,至少我的老板是这样认为的。当时有很多 php 免
费函数库提供在 php3 上实现 session
的方案,但都让人感觉不正宗。
就好象你花好几千大洋买的手机却配置一个很粗糙的草作的袋子一样,虽然功能是一样的,但总让人觉得别
扭。php4 的出现让 php 在 session
问题上
有了翻身的机会。虽然它的 session 实现还不是很理想(主要是效率问题),但毕竟是它自己实现的,而且
可以实际使用了。
那我们用 session 干什么呢,你说了半天,我用不上的话,你岂不有卖纸张之嫌。OK,我们来看看
session 有什么用:作过网站的人都有这样的体会,在一页页面中的变量(在本章都指服务器端变量,下同)
是不能在下一页中用的,虽然有一些办法可以实现,比如用 form,urlstring
等等
但有些对于用户来说是不方便的,即使让 form 自动提交,但其中的延时在现今的网络状况下足以让人窒息,
而这两种方法都明显加大程序员的负担。如果你正在开发一个大型项目,那这些额外的负担是不能忽略的。
而有了 session 就好办了,session 中注册的变量可以作为全局变量使用。什么,全局变量?
好极了。这样一来,你知道有什么用了吧:最主要的用于用户身份认证,程序状态记录,页面之间参数传递。
说了它这么半天的好处,你已经动心了吧,先别高兴,它还有缺点呢:它是用文件保存的变量(当然效率不
高了,
虽然可以用别的方式,但
很麻烦的),不能保存对象。与之相对的是,asp 中的 session 可以保存对象变量,用内存变量来保存
session 变量。但为什么我们还选用 php 呢,呵呵,
为什么,你能从本书的开始看到这章,想必你也应该明白了吧,你还不明白,Faint,你再从头看起吧,我
保证你成为 PHP 专家^_^
。
session 是怎样实现的呢?呵呵,你一定以为很高深吧,我来告诉你它的秘密。如果说只保存变量的话,
很多读者都明白,这是很简单的,
但前面我们说过,http 协议是一种无状态的连接,你怎么知道那个变量是谁的,这个变量又是谁的呢?在
session 实现中用 cookie 实现的。cookie
存在于客户端,也就是用户的机器中,里面保存着用户的 session ID,也就是 session 号码,当用户的
浏览器请求服务器时把 session ID
也一起送到
服务器,这样服务器就可以识别你是谁,也就可以把变量识别开了。这样我们就不难理解了,为什么有时
session 会失效了。不信的话,你可以试试:
在 IE 的"工具"菜单上有"Internet 选项"菜单,打开后再选"安全"->"自定义级别",将安全设置中的"允
许使用每个对话 cookies"
设为禁用,再看看
session 能不能用。这下明白了吧!不过 php4 在 linux/unix 平台上可以自动检查 cookies 状态,当
cookies 不可用时,自动会把 session ID
附带在 url 上进行传递。这是它在 session 方面比 asp
多的唯一的优点了。
二、php3,4 中 session
的实现
在 php3 中是没有 session 这种东东的,但我们又需要,怎么办呢?别急,有很多人替你做了这些,这其
中最有名的要算 phplib
了。你可以去国外下