关于cookie曾经研究过一些,现在补充一些:
1. 进程cookie的实现
从http协议的角度来讲,进程cookie和文件cookie都是用Set-Cookie 来发送的,其区别就是进程cookie没有设置过期时间,而文件cookie有过期时间,PHPSESSIONID是典型的没有过期时间的cookie,不过,除此之外,我们自己设置cookie时只要不指定过期时间,都是进程cookie的,只保留在内存中,不写入cookie文件,达到重启浏览器session失效的效果。不过,还有一点需要注意,也是我从来没有注意到的,PHPSESSIONID也不是说绝对就是进程cookie的,在php.ini 中有下述设置:
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 10
该设置是指定设置PHPSESSIONID这个cookie时(不影响其它进程cookie的设置)是否指定过期时间,0 为不指定,这是正常情况,这样PHPSESSIONID就被设置为进程cookie,如果非0 ,那么发送PHPSESSIONID的Set-Cookie 头时就是含有过期时间的,对于浏览器而言,不管该cookie叫什么名字或起什么作用,只要有过期时间,就是文件cookie(即:写入文件),因为session是要重启浏览器就失效的,所以,我建议将此值设置为0;另外,如果设置的时间比较短而且客户端与服务器的时间差又比较大,可能就无法登陆,因为session刚设置就失效,服务器上的一个将来的时间可能对客户端来说已经是过去的时间了。
2. php发展到4.0 以后,register_globals 一般都设置为off ,所以,我不建议使用session_register();函数,直接使用$_SESSION这个全局变量更好,也方便。
3. 关于PHP加速器eaccelarator默认的编译禁用session的说明: