您的位置:首页 > 编程语言 > PHP开发

php session技术测试使用小结

2007-05-26 16:41 555 查看
在http无状态协议框架下,服务器无法确定客户的身份,毫无疑问,这不能满足所有需求。session技术目前应该是弥补无状态协议的最好方式(之一?) 。Session已经得到普遍支持,从语言方面来说,asp,java,php等都有Session技术的具体实现,这里主要写下我用PHP的Session实现技术,其他应该基本类似。

Session是一种服务器端技术,但他也可能需要客户端协作。当客户端同服务器连接上后,服务器将会给该客户分配一个随机的ID,称为SID(Session ID),因为是随机产生的(并且很长),实际上保证了唯一性,这样,服务器就可以识别客户。这一过程通过服务器端调用session_start实现,(默认)这将会产生一个session文件,(默认)在/tmp下,文件名包含了SID,文件内容是服务器写的字段,比如记录用户名称,用户喜好等等。当然也可以将这些写入数据库,具体就不说了。

既然http是无状态的,那么下一次客户端访问服务器,服务器怎么知道它是谁呢?很显然,客户端必须告诉服务器特定的信息,这就是前面生成的SID.那么客户端又是怎么得到这个SID的呢,也很显然,服务器发给它:这里有两种方式------一种是基于Cookie技术, 服务器在生成SID的时候将SID写入Cookie并随http头一同发送给客户,客户以后每次再访问服务器时将附带此Cookie。Cookie分为会话Cookie和永久Cookie,前者在内存中,在客户端重启后将消失,后者将写入客户端磁盘,所以即便重启客户端,只要没有过期,仍然可用(至于Cookie期限可由服务器端在生成Cookie时设置)。但是客户端有可能不支持Cookie,或者有意禁掉,这种情况下还有第二种方式,所谓Url重写,即服务器在url中加上SID作为查询参数(或类似)。

服务器端使用Session变量(即写入Session文件中的变量)非常简单,像普通超级变量一样---$_SESSION['name'],可以通过读取这些变量获知客户身份,喜好等等。如果缺乏相应变量,那么就可以判断用户没有登录或者用户不具有某种特征。

通过实验做出如下判断:在客户端没有提交SID的情况下(包括通过Cookie或Url重写方式,另外一种所谓隐藏技术已不被推荐),服务器端调用session_start将会产生新的Session。如果客户端提交了SID,那么session_start将会检查是否存在该SID对应的Session,如果没有的话将会新建该Session,如果有的话则继续使用。所以即便将服务器端Session文件删掉,当客户端再次请求还是会生成相同文件(不过内容为空了)。

最后要记住的是,要需要使用会话变量时,必须一开始在文件头调用session_start.

关于session关闭就不细述了。有空再写...^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: