黑马程序员技术交流社区

标题: 谁能给解释一下session的问题?它的值是放在客户端?还是服务器端?请看我的情况... [打印本页]

作者: 王海飞    时间: 2011-7-19 11:20
标题: 谁能给解释一下session的问题?它的值是放在客户端?还是服务器端?请看我的情况...
我现在启动两台tomcat服务器A,B,数据相同,  我的登陆使用session控制的  
当我登陆到   A  服务器上,并且同验证,可以使用了  
然后在session没有失效的情况下切换到  B  服务器,发现并没有让输入密码,直接登陆成功  
为什么?  
---------------------------------------------------------------
[ 本帖最后由 王海飞 于 2011-07-19  11:23 编辑 ]
作者: 匿名    时间: 2011-7-19 11:30
首先说明:web上用的都是非连接的网络协议  
session  是存在服务器上的  
每个session有一个唯一的session  ID(为了标识他是那个客户端的)  

在启动session的同时,会在客户端生成cookie,服务器把session  ID加到cookie中  
每次服务器和客户端交互的时候,就是从cookie中取得session  ID  来定位服务器上的session  

这样只要你的cookie不过期,服务器上有你的session,就不会出问题
作者: 匿名    时间: 2011-7-19 23:45
Cooike是客户端的技术,默认情况下存放在浏览器的内存中,浏览器关闭后,Cookie消失,但是也可以使用setMaxAge(int 秒)的方法修改其存活时间,此时Cookie存放在硬盘上。
        Session是服务器端的技术,当有一个客户端访问服务器时,服务器为这个客户端创建一个session对象,此对象存放在服务器上,默认存活时间为30分钟。注意:Session在第一次请求相应时才产生。
        两者的关系:当服务器为客户端创建session对象后,对象有一个sessionID,这个id自动记录在cookie中,保存在客户端,当客户端再次访问服务器是,将会带着cookie访问,服务器先查看cookie中保存的sessionID,以辨别服务器上是否已存在该session对象,如果有,继续使用这个对象。默认情况下浏览器关闭,cookie跟着消失,客户端再次访问服务器时,服务器就不会提供原来的那个session对象,它会生成一个新的session对象以供使用。如果设置cookie的保存时间,那么cookie将保存在硬盘上,那么即使浏览器关闭再重开,依然可以通过cookie取得原来的session对象。这里有一种情况是,浏览器被设置为禁止使用cookie,这种情况下,客户端访问服务器时就无法使用原来的session对象了,解决方案是,通过URL重写的方法来代替cookie行使传递sessionID的功能,以获得原来的session对象。URL重写的方法是:
1 重定向的情况使用encodeRederictURL(String URL) 2 请求转发的情况使用encodeURL(String URL)。这样,sessionID就可以通过URL地址传递给服务器。但是cookie优先于URL重写。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2