




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
session过期时间设置说明一. 系统session配置说明针对承保(prpall)、双核(undwrt)系统中,有两个配置文件可以设置session的过期时间分别是web.xml和weblogic.xmlWeb.xml中配置 60 时间单位是一分钟,并且只能是整数,如果是零或负数,那么会话就永远不会超时。此例表示Session将在60分钟后过期weblogic.xml中设置的TimeoutSecs属性值。Weblogic.xml中配置 TimeoutSecs 1800 时间单位是一秒钟,表示1800秒后失效。1.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须可以被60整除,(如60,120等)。则按照时间最小的那个为准。2.如果两个配置文件中都有配置,且Weblogic.xml中配置的秒数必须不可以被60整除(如,45,90等)。则以web.xml设置的时间为准。3. 如果web.xml文件中没有设置,且Weblogic.xml中有配置。则按照Weblogic.xml的设置为准。4. 为保证session的唯一性,在weblogic环境下,建议只在weblogic.xml中设置。防止出现冲突。二. 疑问1. web.xml,weblogic.xml同时配置时,为什么会是以时间小的为准?暂时无解。2. 对应的weblogic.xml 必须配置为分钟的整数倍? 如web=2m weblogic=90s,最终为以web为准。web=3m weblogic=120s 以 weblogic为准暂时无解。3. 关于“WEB-INF/config/appconfig/SysConstConfig.xml” 中的session时效时间。从目前情况看, SysConstConfig.xml 这个应该没有使用;那么就是 web.xml 与weblogic.xml 这两个的配置用谁的问题了。按网上说法,对应的优先级应该是:自定义xml配置的sessionweb.xmlweblogic.xml;个人理解为:自定义的配置最高的原因是因为,我们程序实现判断session时去读取了这个时间;对于web.xmlweblogic.xml,从上述的测试过程中发现并不是如此。三. 配置session方式WebLogic如何设置session超时时间 1 web.xml 设置WEB应用程序描述符web.xml里的元素。这个值以分钟为单位,并覆盖weblogic.xml中的TimeoutSecs属性 54此例表示Session将在54分钟后过期当设置为2,表示将使用在weblogic.xml中设置的TimeoutSecs这个属性值。当设置为1,表示Session将永不过期,而忽略在weblogic.xml中设置的TimeoutSecs属性值。该属性值可以通过console控制台来设置2 weblogic.xml设置WebLogic特有部署描述符weblogic.xml的元素的TimeoutSecs属性。这个值以秒为单位 TimeoutSecs 3600 默认值是3600秒3,jsp中控制 session.setmaxinactiveinterval(7200);session是默认对象,可以直接引用,单位秒s 4,servlet中控制 httpsession session = request.getsession();session.setmaxinactiveinterval(7200); 单位秒s在weblgoic的console中:xxDomainServers-xxServer-Protocols-HTTP 中有一个关于Post Timeout的配置,但这个参数一般使用默认值即可一般是通过Services-JDBC-Connection Pools-MyConnection(你所建立的连接池名)Configration-Connections 里的Inactive Connection Timeout这个参数来设置的,默认的为0,表示连接时间无限长。你可以设一个时间值,连接超过这个时间值,它会把连接强制放回连接池是否IdleConnectionTimeout参数看连接池中高级选项内的Inactive Connection Timeout和Connection Reserve Timeout时多少, 把这两项设大些试试如果在两个文件中同时设置了超时时间,则会以web.xml中为准。所以在weblogic环境中,最好将web.xml中关于超时的设置删掉,保持唯一性。 如果使用WEBLOGIC作为应用服务器,设置SESSION超时时间会选择在WEBLOGIC的控制台设定。实际上,WEBLOGIC是将超时设定保存在WEB-INF下的weblogic.xml中,格式如下: TimeoutSecs 7200 param-value中的数值就是超时时间,单位为秒。在设置完这个参数后,会发现超时时间并一定起效。这是为什么呢?原来在WEB-INF下还有一个配置文件web.xml,里面同样会有一段设置session,格式如下: 30session-timeout中的值也是超时时间,单位为分钟。如果在两个文件中同时设置了超时时间,则会以web.xml中为准。所以在weblogic环境中,最好将web.xml中关于超时的设置删掉,保持唯一性。这也是发现了问题后,多次实验后发现的。 以下问题:ueue: billproxyqueue has been busy for “727 seconds working on the request “Http Request: /bill/ynQueryPublic.go”, which is more than the configured time (StuckThreadMaxTime) of “600 seconds.一看明显是连接超时, 导致的错误.程序问题,是不是程序中没有关闭连接如果程序没问题,则是weblogic的StuckThreadMaxTime设置过小而引起的,一般weblogic server 的StuckThreadMaxTime默认参数是600s,即10分钟,如果并发量过大,而导致等待处理过多,导致系统不停的增加线程,造成线程阻塞,你可以把该参数设置大点这个是稍微调大StuckThreadMaxTime的参数即可.看线程数设置,可适当增加线程数,这个在WLS控制台中可以调整四. 关于session 通过 在weblgoic的console中配置的补充:在weblogic10R3 中配置方法:登录console之后,部署选择对应的应用(如 undwrt)配置改完后保存,会另存为其他的xml文件,如下图流程。五. session与cookie的详细说明具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。cookie的内容主要包括:名字,值,过期时间,路径和域。其中域可以指定某一个域比如.,相当于总店招牌,比如宝洁公司,也可以指定一个域下的具体某台机器比如或者,可以用飘柔来做比。路径就是跟在域名后面的URL路径,比如/或者/foo等等,可以用某飘柔专柜做比。路径与域合在一起就构成了cookie的作用范围。如果不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览器会话期的 cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。对于IE,在一个打开的窗口上按Ctrl-N(或者从文件菜单)打开的窗口可以与原窗口共享,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie;对于Mozilla Firefox0.8,所有的进程和标签页都可以共享同样的cookie。一般来说是用javascript的window.open打开的窗口会与原窗口共享内存cookie。浏览器对于会话cookie的这种只认cookie不认人的处理方式经常给采用session机制的web应用程序开发者造成很大的困扰。经典的语录下面就是一个goolge设置cookie的响应头的例子HTTP/1.1 302 FoundLocation: /intl/zh-CN/Set-Cookie: PREF=ID=0565f77e132de138:NW=1:TM=1098082649:LM=1098082649:S=KaeaCFPo49RiA_d8; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.Content-Type: text/html到时候我们的域就要设置为domain=.*.cnpath=/session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。四、理解session机制session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于 SEEESIONID,而。比如weblogic对于web应用程序生成的 cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,它的名字就是JSESSIONID。由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http:/. /xxx;jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764另一种是作为查询字符串附加在URL后面,表现形式为http:/./xxx?jsessionid=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764这两种方式对于用户来说是没有区别的,只是服务器在解析的时候处理的方式不同,采用第一种方式也有利于把session id的信息和正常程序参数区分开来。为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如下面的表单在被传递给客户端之前将被改写成这种技术现在已较少应用,笔者接触过的很古老的iPlanet6(SunONE应用服务器的前身)就使用了这种技术。实际上这种技术可以简单的用对action应用URL重写来代替。在谈论session机制的时候,常常听到这样一种误解“只要关闭浏览器,session就消失了”。其实可以想象一下会员卡的例子,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。对session来说也是一样的,除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的 HTTP请求头,把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。写得太精彩了。感受太深了!1、session在何时被创建一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。 由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。2、session何时被删除综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)3、如何做到在浏览器关闭时删除session严格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session参见第三小节对cookie的讨论,对session来说是只认id不认人,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。8、如何防止用户打开两个浏览器窗口操作导致的session混乱这个问题与防止表单多次提交是类似的,可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端,同时保存在session里,客户端提交表单时必须把这个id也返回服务器,程序首先比较返回的id与保存在 session里的值是否一致,如果不一致则说明本次操作已经被提交过了。对不起你已经投过票了!可以这样来进行控制的哦八、总结session机制本身并不复杂,然而其实现和配置上的灵活性却使得具体情况复杂多变。这也要求我们不能把仅仅某一次的经验或者某一个浏览器,服务器的经验当作普遍适用的经验,而是始终需要具体情况具体分析。为什么登陆后,只要不关闭浏览器,session就能一直存在?当然session的数据是保存在服务器上的,但服务器是怎么识别这些数据都是谁的呢?答案是sessionid,每一个浏览者都唯一的sessionid,这就很好的区分了不同浏览者的不同session了.sessionid是怎么产生的?应该是第一次访问服务器的时候随即生成的.假如是111,然后他的登陆信息是true,服务器就知道sessionid为111已经登陆了,这些信息都存在了服务器上了.但当浏览者继续操作的时候,也就是打开该系统的另一个页面的时候sessionid怎么办?如何传递?打开另一个页面的时候其实相当于重新访问系统,如果没有特殊的处理机制,系统会再次重新分配一个sessionid的,这样的话就失去意义了!所以sessionid在第一次访问后应该存在了客户端.能寸哪呢?当然,只能寸在cookie中了,这就是为什么关闭cookie,session就失去作用了十三、保存session id的几种方式A保存session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。B由于cookie可以被人为的禁止,必须有其它的机制以便在cookie被禁止时仍然能够把session id传递回服务器,经常采用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,另一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id。C另一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。二十五、session cookie和session对象的生命周期是一样的吗当用户关闭了浏览器虽然session cookie已经消失,但session对象仍然保存在服务器端二十六、是否只要关闭浏览器,session就消失了程序一般都是在用户做log off的时候发个指令去删除session,然而浏览器从来不会主动在关闭之前通知服务器它将要被关闭,因此服务器根本不会有机会知道浏览器已经关闭。服务器会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。之所以会有这种错误的认识,是因为大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接到服务器时也就无法找到原来的session。如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求报头,把原来的session id发送到服务器,则再次打开浏览器仍然能够找到原来的session。恰恰是由于关闭浏览器不会导致session被删除,迫使服务器为session设置了一个失效时间,当距离客户上一次使用session的时间超过了这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把session删除以节省存储空间。由此我们可以得出如下结论:关闭浏览器,只会是浏览器端内存里的session cookie消失,但不会使保存在服务器端的session对象消失,同样也不会使已经保存到硬盘上的持久化cookie消失。二十七、打开两个浏览器窗口访问应用程序会使用同一个session还是不同的session通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的session id,这样我们信息共享的目的就达不到了。此时我们可以先把session id保存在persistent cookie中(通过设置session的最大有效时间),然后在新窗口中读出来,就可以得到上一个窗口的session id了,这样通过session cookie和persistent cookie的结合我们就可以实现了跨窗口的会话跟踪。2.cookies的属性有:Domain(域):哪个站点发的哪个站点拿走 Expires:是否过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全体员工安全教育培训课件
- 保密制度培训班课件
- 2025-2026学年江西省赣州市五校协作体物理高三上期末达标检测试题
- 不良贷款处置管理办法
- 企业端午节前安全培训课件
- 企业烫伤安全培训内容课件
- 建筑企业新质生产力发展
- 湖南娱乐垂钓管理办法
- 海上实验奖励管理办法
- 庆阳辅警考试题库(含答案)
- 《进一步规范管理燃煤自备电厂工作方案》发改体改〔2021〕1624号
- 重庆抗战历史文化概述
- 输变电工程施工质量验收统一表式附件1:线路工程填写示例
- MOOC 知识创新与学术规范-南京大学 中国大学慕课答案
- 人教版八年级下学期期末考试英语试题(附听力原文及答案解析)
- 移动公司个人求职简历模板
- 燃气巡线员专业知识考试题库(附答案)
- 小学二年级学生心理健康教育内容
- 《高一数学开学第一课:学好高中数学》课件
- 红帽认证管理员RHCSA(习题卷1)
- 2021地质灾害治理工程施工质量验收规范
评论
0/150
提交评论