黑马程序员技术交流社区
标题:
谁能给解释一下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