php session技术测试使用小结

在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关闭就不细述了。有空再写...^_^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值