session运行机制初解(四)

七、跨应用程序的session共享

    常常有这样的情况,一个大项目被分割成若干小项目开发,为了能够互不干扰,要求每个小组作为一个单独的web应用程序开发,可是到了最后突然发现某几个小项目之间需要共享一些信息,或者想使用session来实现SSO(single sign on),在session中保存login的用户信息,最自然的要求是应用程序能够访问彼此的session。

    然而按照Servlet规范,session的作用范围应该仅仅限于当前应用程序下,不同的应用程序之间是不能够互相访问对方的session的。各个应用服务器从实际效果上都遵守了这一规范,但是实现的细节却可能各有不同,因此解决跨应用程序session共享的方法也各不相同。


八、总结

    创建session时会产生session id,浏览器中通过cookie记录这个session id,将这个session id记录到硬盘中并设置时间从而达到持久化(类似于免登陆)的操作,当到达所设置时间后,清空session id。

    普通创建session完成一次会话,是将session id存储在内存中,关闭session或关闭会话,session id销毁,不做记录;

    做持久化session,为session设置过期时间,此时生成的session id会存储到硬盘中,到达过期时间或主动关闭会销毁;

    session还可以用来做两个界面的交互。例如:打开淘宝,7天免登陆成功后,打开淘宝页内的其他网页,同样会记录登录信息,包括未到时间的另一次会话登陆。

    解决两个浏览器打开,导致session混乱的问题;例如:保存获奖信息;为张三保存一次,提交一次,会生成一个令牌001(token),如果不小心双击,会导致添加两次还是报错呢?它会去拿本次生成的令牌001去跟将要生成的令牌号去比对,如果相同,则表示重复提交,不做任何操作,不同则加;

    session创建时间:并不是有客户端访问时就被创建,而是到某server端程序调用HttpServletRequest.getSession(true)这样的语句才被创建;由于session会消耗内存资源,如不打算使用session,应在所有JSP中关闭。

    session何时被删除?1:程序调用HttpSession.invalidate();2:超过了设置时间;3:服务器进程被停止(非持久化session)

    如果要在浏览器关闭时删除session,可以试试在客户端页面中使用javascript代码window.oncloose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。

    可以监听创建与销毁session:创建Http SessionListener去监控session的创建和销毁事件:注意是session的创建与销毁触发listener,而不是相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值