这次说说session.
session可以说是当前互联网提到的最多的名词之一了。它的含义很宽泛,可以指任何一次完整的事务交互(会话):如发送一次HTTP请求并接受响应,执行一条SQL语句都可以看做一次Session。如无特殊说明,本文中提到的Session单指HTTP会话。
本文是PHP内核探索的第五篇,主要包含如下几个方面的内容:
1. HTTP是无状态的
我们知道,HTTP协议最初是匿名的、无状态的请求/响应协议。这样简单的设计可以使HTTP协议专注于资源的传输(HTTP是超文本传输协议),从而获得较好的性能。但这种无状态的设计也验证阻碍了交互web应用的发展,典型的如:电商网站需要获取用户的信息,以实现订单、购物车、交易等功能,SNS网站需要获取用户信息并存档,以建立真正的“社交网络”,甚至电影和CD租赁网站,也需要获取用户信息,以提供个性化的推荐,从而带来更好的效益。这意味着,必须要使用某种技术来识别和管理用户信息,Cookie和Session技术便是在这种背景下诞生的。
2. Session与Cookie
说到Session,就不得不提Session的好基友Cookie,因为很多情况下Session依赖于Cookie存储其session_id。而如果要说Session和Cookie的区别,我想大家应该都不陌生,有的同学甚至可以轻松背出如下一些常见的区别:
(1). Cookie是客户端保持状态的解决方案,而Session是服务器端保持状态的技术,因此,Cookie是存储在客户端的,而Session是存储在服务器端的。
(2). 大多数情况下,Session需要使用Cookie做载体,来存放session_id,所以,如果禁用了Cookie,必须要通过其他的手段来获取这个session_id( 例如通过get或者post的方式将session_id传递给服务器 )
(3). Cookie过期和删除只能保证客户端的连接的失效,并不会清除服务器端的Session
(4). 尽管默认情况下,Session和Cookie都是写文件的( Session也可以写数据库或者其他内存缓存如memcached ),但是,Cookie则依赖于浏览器的设定:例如,IE6下限定每个域名下最多20个Cookie,很多浏览器限制Cookie的大小不能超过4096字节。
关于Cookie的更多讨论,已经超出了本文的范畴,需要了解的同学可以参考《HTTP权威指南》和《JavaScript高级程序设计》这两本书,相信一定会对Cookie有更加深入的理解。
3. php中Session的基本操作
php中,Session相关的操作是以扩展的形式提供的 ( 源码目录:PHPSRC/ext/session/ )。PHP提供了大量的、丰富的API来操作Session:
(1). session_start
bool session_start ( void )