apache webserver & brows 会话机制

测试环境:apache+php   

Php.inisession设置:

                               ; Whether to use cookies.

                               session.use_cookies = 1  此值设置为0后测试站点就永远也登录不上

                               session.name = 9ai9

                               ; Lifetime in seconds of cookie or, if 0,until browser is restarted.

                               session.cookie_lifetime = 0  


        web服务端和浏览器之间需要保持session是由HTTP协议本身特性而定的。无状态:对事务的处理没有记忆能力;无连接:每次链接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,就主动断开连接。

        session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。Web服务器程序中有一个session对象,多用于保存客户登陆信息、购物车等信息。服务端通过验证session中保存的值从而验证用户信息。在存入session变量后服务端就会为其创建一个名为cookie9ai9=************的值并将其以HashTable的形式写到服务器内存中,并将值返回给浏览器,浏览器后续的访问会在报头中带上此cookie session值,以表明自己的身份。session理应是服务端创建的。

        分析时另我疑惑的是:在服务端用tcpdump抓包时,发现每次这个cookie session值是由客户端发给服务端的,此后反复试验,用firebug清空浏览器cookie,此时在点击站内网页,发现登录失效了,然后重新登录,用HTTP 的POST请求将登录表单提交给服务器,登录成功,服务器的回复报文能看见有set cookie9ai9=*************的信息,此为重新生成的sessionid。退出登录但不关闭浏览器,再次访问网站登录页面时客户端的HTTP请求报头会有退出登录前的sessionid值,再次登录,服务器并不会生成新的sessionid,而是重用这个session值,后面每次访问报头都是此sessionid。关闭浏览器后就需要服务端重新分配session值。说明session值的确是由服务端生成的,只是在没有关闭浏览器即使注销登录了对站点访问的session值都不会重新生成。

        综上apache是运用的临时cookie机制保持站点会话的。



猜你喜欢

转载自blog.csdn.net/zouhaozl2008/article/details/8115607