生命周期和普通Servlet(也就是ServletActionContext)一样吗?? |
|
求解。。。。。
|
|
5分 |
从名字可以看出来
request:一次请求是指向后台发起请求,后台响应,然后返回数据给前台,此时一次请求完成了,request(这次)的生命就完了 Session:其生命周期是指一次回话过程中,即从打开游览器到关闭游览器 application:和ServletContext的生命周期一样 |
5分 |
request,session,application 不是属于Struts2 的ActionContext
Struts2中开发用到的request,session,application 仍然是servlet中的 actionContext 可以保证不依赖web组件 threadlocal对象 |
哦,是这样啊 |
|
那为什么我将登陆的用户保存在session中,然后重启服务器,没有关闭浏览器,session中的用户还有效?重启服务器只影响application不影响session? |
|
5分 |
有的服务器是支持session持久化的,例如tomcat6,并且tomcat6默认就提供了这项功能.
你可以查看$TOMCAT_HOME$/conf/context.xml,找到 <!– Uncomment this to disable session persistence across Tomcat restarts –> 去掉注视就可以了 |
5分 |
session是有生命周期的,你可以进行设置的 |
Session什么时候失效?
1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。 2. 调用Session的invalidate方法。 Session对浏览器的要求: 虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。 |
|
你说的很专业,但是没怎么看懂,我只想知道不关闭浏览器只重启服务器,session会失效吗? |
|
利用cookie标识来查找服务器上的数据。
重启服务器,session数据会不会清空 |
|
嗯嗯,,, |
|
session20分钟内有效
|
|
就算重启服务器只要二十分钟内,不关浏览器就有效? |
|
是的,但是你是可以设置的
|
|
Session过期是从停止活动开始计算的 三种方式设置: 1. 在server.xml中定义context时采用如下定义: <Context path="/livsorder" docBase="/home/httpd/html/livsorder" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/> 2. 在web.xml中通过参数指定: <session-config> <session-timeout>30</session-timeout> </session-config> 其中30表示30分钟 3. 在程序中通过servlet api直接修改 HttpSession ses = request.getSession(); ses.setMaxInactiveInterval(10); 设置单位为秒,设置为-1永不过期。
|