web服务器为每一个浏览器实例对应一个session。这个session有自己的一个独立id,这个id保存在浏览器的cookie中(这个cookie貌似随着这个浏览器实例的关闭而清除),访问web服务器的时候,web服务会根据你cookie中的sessionId来决定重新创建一个session还是使用已经存在的session。
如果使用桌面的ie图标打开一个IE窗口,这个窗口属于一个新的浏览器实例(其中不包含sessionid信息),这时候用这个IE访问web服务器的时候web服务器会为这个浏览器实例新创建一个httpsession,sessionId也是新的(sessionId保存到本地的cookie中),不会对你以前打开的窗口中的session产生覆盖,关闭ie窗口的时候cookie中的信息也就清除掉了。 
如果是在打开的ie窗口中按“ctrl+n”打开一个ie窗口,这个窗口于刚才的窗口是同一个实例,与刚才的窗口共用session,所有的同一个ie实例的窗口都关掉后,会清除掉sessionId。

补充一点,可以通过人为的输入参数sessionId通知web服务器你使用的是哪个session(如果服务器存在这个session的话)。

*****************************************************************************************************************************************

         单点登录(有别于SSO:Single Sign On),首先解释一下对项目需求中的单点登录的理解:一个用户帐号成功登录后,在该次session还未失效之前,不能在其他机器上登录同一个帐号,这有点类似与QQ只能在同一台计算机上登录。好了,如何实现呢?现在分析一下:一次登录也就是一次会话(Session),那么我们可以很容易联想到通过控制session来实现单点登录,我的设想是这样的,登录后将用户信息保存到session中,如果此时在另外一台机器上一个相同的帐号请求登录,通过遍历Web服务中所有session并判断其中是否包含同样的用户信息,通过这样的判断,在另一台机器上登录该帐号是不成功的。
上面已经提到了,需要通过控制session,对web服务中所有session进行遍历操作,那么你肯定会想到application这个大对象了(当然你也可以采用缓存或者数据库),具体实现方法是这样的,首先在application中创建一个List<HttpSession>,用来保存每一次会话(session)对象,系统在验证用户登录请求时,通过遍历该list并加以判断,最后决定是否让该用户成功登录。OK,需求和设计都在上面了,接下来就是编码工作了哈。不过在这里还需要考虑几个问题:
1、如果登录后关闭了浏览器,想立即打开一个新的浏览器并登录将会失败,因为前一次登录后的session还没销毁,你需要等其销毁后方可再次登录成功,这种问题如何解决???哈哈,你是不是已经想到要用javascript处理一下下,即在关闭浏览器的时候触发一个事件,该事件就是通知来销毁当前session的。
2、第二个问题其实是接上一个问题而讨论的,用javascript触发浏览器关闭事件并不是一个好办法,因为有很多因素可能导致这个事件触发不成功,还有Firefox和IE这两个东东意见有时候并不统一,最后有一个比较可恶的问题就是,我在同一台机器上不能打开两个浏览器窗口去登录相同的帐号,因为一个浏览器对应一个session啊!这就是为什么我在文章一开始要引用一些基本知识。
既然问题很严重,那就动脑壳去想办法啊!我在这里自言自语了半天,我不打算用中文继续讲下去了,直接code上场吧:
 
login.jsp

如何通过session控制单点登录的更多相关文章

  1. session 控制单点登录

    在我登录成功之后,我会 session.setAttribute("user", userMap);//设置session 所以就写了一个监听器来控制登录的. package or ...

  2. TP、PHP同域不同子级域名共享Session、单点登录

    TP.PHP同域不同子级域名共享Session.单点登录 目的: 为了部署同个域名下不同子级域名共享会话,从而实现单点登录的问题,一处登录,同域处处子系统即可以实现自动登录. PHP支持通过设置coo ...

  3. SpringBoot 整合Shiro实现动态权限加载更新+Session共享+单点登录

    作者:Sans_ juejin.im/post/5d087d605188256de9779e64 一.说明 Shiro是一个安全框架,项目中主要用它做认证,授权,加密,以及用户的会话管理,虽然Shir ...

  4. redis缓存+session 实现单点登录

    一.单点登录介绍 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系 ...

  5. 你真的知道什么是【共享Session】,什么是【单点登录】吗?

    一直有人问,为什么我实现的共享session不能单点登录,今天我也抽时间准备好好说一下. 我要喷(别喷我) 首先,网上水货文章很多,CSDN居多.CSDN转载率很高,也就是说同相同文章有很多,换汤不换 ...

  6. 单点登录系统---SSO

    1.------------------SSO介绍--------------------------------- 有什么卵用?搞什么飞机的? 大家看看这个图,一个系统是没有问题.如果是分布式的系统 ...

  7. JAVAEE——宜立方商城10:使用freemarker实现网页静态化、ActiveMq同步生成静态网页、Sso单点登录系统分析

    1. 学习计划 1.使用freemarker实现网页静态化 2.ActiveMq同步生成静态网页 2. 网页静态化 可以使用Freemarker实现网页静态化. 2.1. 什么是freemarker ...

  8. 单点登录--sso系统

    SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制 ...

  9. 七、spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制

    1.安装cas-server-3.5.2 官网:https://github.com/apereo/cas/releases/tag/v3.5.2 下载地址:cas-server-3.5.2-rele ...

随机推荐

  1. 开发EXTMVC框架前需要了解的基础知识整理

    1.组件选择器 目的:了解如何选择Extjs中的组件,就跟学习jquery时一定会先要学习:$()选择器一样. 常用场景:       1.在controller中的control事件中用到      ...

  2. 【BZOJ】【1011】【HNOI2008】遥远的行星

    神奇的思路题QAQ 玛雅看到这题我就醉了,什么玩意……5%的误差?果断膜拜@ydc神犇的题解: 就是因为不清楚如何应用那个答案误差不超过5%啦. 从没见过这么诡异的题一下就懵了,问到了方法之后都还半信 ...

  3. .NET设计模式(10):装饰模式(Decorator Pattern)(转)

    概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性:并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多 ...

  4. 如何将控制台程序包装成windows服务

    1. 新建一个项目,或者从选择当前解决方案--右键-添加--新建项目 2. 选择(项目类型)Visual C#项目,(模板)Windows 服务,填写要创建的服务名称(修改默认的WindowServi ...

  5. redis集群部署之codis 维护脚本

    搞了几天redis cluster codis 的部署安装,测试,架构优化,配合研发应用整合,这里记一些心得! 背景需求: 之前多个业务都在应用到redis库,各业务独立占用主从两台服务器,硬件资源利 ...

  6. POJ 1065 Wooden Sticks

    Wooden Sticks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16262 Accepted: 6748 Descri ...

  7. 异步等待的 Python 协程

    现在 Python 已经支持用协程进行异步处理.但最近有建议称添加协程以全面完善 Python 的语言结构,而不是像现在这样把他们作为生成器的一个类型.此外,两个新的关键字---异步(async)和等 ...

  8. (转)Eclipse平台技术概述

    转载:周金根 http://zhoujg.blog.51cto.com/1281471/516833    Eclipse:Eclipse平台技术概述 2010-10-19 13:35:00 标签:E ...

  9. LA 4256

    Traveling salesmen of nhn. (the prestigious Korean internet company) report their current location t ...

  10. YAPF:Google开源的Python代码格式化工具

    点这里 现在的大多数 Python 代码格式化工具(比如:autopep8 和 pep8ify)是可以移除代码中的 lint 错误.这显然有些局限性.比如:遵循 PEP 8 指导的代码可能就不会被格式 ...