网上看了很多方法,个人也看了,自己也总结了几个比较常用的:

前提都是用session监听器,对session的创建与销毁进行监听

一、在用户登录时保存该用户的状态有这几种保存方式:

1、保存到内存中(application ,servletcontext ,个人也是推荐这种方式)

2、保存状态到数据库,至于具体的怎么保存你可以随意返回,如:0,1两种状态

3、保存到文件中,对文件的读写

以上是登录用户的状态,这对于大家来说都没有什么问题。

二、 这时如果同一用户登录了,你可以在登录成功后(保存信息之前)进入到上面的状态 中进行匹配判断,如果存在就提醒此用户你的账号已登录。

三、关键在于该用户的销毁

invliate(),调用这个方法,通过Session的监听器,进行对当前用户的删除。

Session过期,也会调用Session监听器。

讨论最多的就是在比如用户没有自己去注销session.invalidate()方法,而是直接关闭了 浏览器,这时怎么办?(浏览器关闭半个小时候,默认注销session,监听器这时才调用sessionDestroyed方法)。

首先要明确的一点,用户关闭浏览器,服务器端是无法得知的(因为web客户浏览器与服务器之间是无状态的),网上也有一些解决方案,比如通过js来判断用户是否关闭了浏览器,是的次方法可行,但是如果用户操作时,打开了多个窗口呢,这里也有方法:

1、一个方法还是比较好的,通过cokkie保存当前用户开了的页面数,如果页数为一的话,就可以触发js的注销Session了。

2、先把Session的生命期设置的短一点,用类似ajax这种异步请求方式周期不断的去请求后台,这样可以保证当前的这个Session有效,如果用户退出后,该Session也会很快的过期。

上面的两种方式都有些缺陷,如:

1、用户删除cokkie的话,就无法判断准确,这种可能应该不多吧(在访问当前网站时)

2、有延迟,服务器压力相对来说比较大

还有一种方式与上面的思考角度不一样(当然也要看需求了),如果有用户登录时,就注销之前已登录的同一用户。

实现方式与上面应该是差不多的,唯一不同之处在于,不用去刻意的想办法让用户退出了(注销Session)。

四、虽然像百度,CSDN等这些网站都没有这样做,当然也没有必要这要这样做。

但是在我们做企业内部应用的时候有时候可能会要求我们这样做(同一账号在统一时间只能在一个登录),下面是个例子

我们先定义两个Map对象需要用到,存放用户与HttpSession的关系和sessionId与用户的关系。用来记录当前登录的用户是否登录和当前session是否已经绑定了登录用户。

java web实现同一账号在不同浏览器不能同时登录的更多相关文章

  1. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  2. Eclipse创建的Java Web项目,如何启用外置浏览器访问jsp或者html页面

    当我们用Eclipse创建了一个Java Web项目,想访问一个jsp或者html页面时,通常会在目标页面(以jsp为例)上点击鼠标右键,选择[Run As]——>[Run on Server] ...

  3. Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互

    框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java   model文件夹下的 Global ...

  4. Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

  5. java web程序上传文件,浏览器显示连接被重置

    上传文件时,到13%时浏览器显示连接被重置如图: 参考网上很多方法 比如设置server.xml 的相应大小.时间,然并没有解决问题 connectionTimeout="2000000&q ...

  6. Web终端之使用shellinabox在浏览器进行ssh登录

    shellinbox有一个内建的web server作为基本的web ssh client,允许你通过指定的端口访问linux服务器的ssh shell,只要你的浏览器支持AJAX/JS/CSS就可以 ...

  7. [原创]java WEB学习笔记29:Cookie Demo 之自动登录

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Java web应用开发技术

    Java web应用程序供用户通过浏览器发送请求,程序通过执行产生web页面,并将页面传递给客户机器上的浏览器,将得到的web页面呈现给用户. 一个完整的Java web应用程序通常由许多组件构成的, ...

  9. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...

随机推荐

  1. smarty逻辑运算符

    smarty逻辑运算符 eq        equal : 相等 neq       not equal:不等于 gt        greater than:大于 lt        less th ...

  2. 一、基础篇--1.2Java集合-HashMap死循环问题

    为什么HashMap会出现死循环 首先,我们知道java的HashMap不是线程安全的.多线程下应该使用ConcurrentHashMap. HashMap底层是基于动态数组和单向链表(JDK1.7, ...

  3. 码云上webide怎么提交

    修改后想提交,它会提示:“暂存文件后才能提交”, 我拿放大镜找遍了整个界面也没找到“暂存”按钮, 原来,文件旁边那个+号就是暂存,好歹鼠标方式去之后给个tip,服了. 点一下这个加号,提交按钮就可用了 ...

  4. WebService:asp.net类库中添加WebService引用出现问题解决方法

    ylbtech-WebService:asp.net类库中添加WebService引用出现问题解决方法 1.返回顶部 1. 在Web项目内添加WebService的引用是件很简单的事情,今天在类库中添 ...

  5. vue echarts圆角阴影效果

    series: [ { name: '销量', type: 'bar', data: [5, 20, 36, 10, 10, 20], itemStyle: { normal: { barBorder ...

  6. BFC是什么?有什么作用?

    BFC(Block Formatting Context)直译为“块级格式化范围”. 一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: ...

  7. vs2010 SetUp 安装软件时,界面出现乱码的问题

    AppLocale在简体中文系统里使用之后, 会令某些简体中文的MSI形式的安装程序 显示乱码(比如: OFFICE2000简体中文版安装程序). 解决方法: 方法一: 卸载AppLocale即可解决 ...

  8. asp.NET 下真正实现大文件上传

    一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了.我这里分享一下我自己开发的一套大文件上传控件 ...

  9. 查找担保圈-step1-担保圈表函数

    USE [test]; GO /****** Object: UserDefinedFunction [dbo].[f_findrecycle] Script Date: 2019/7/8 14:37 ...

  10. Series与list

    一.索引 1.1 索引顺序 list的索引为从0到n-1.不可更改索引. Series的索引:如果未定义为从0到n-1.如果定义,则为定义的索引,一旦定义完成,索引对象将不可更改.但是索引是可以改变的 ...