首先在系统增加sessionListener 来监听session 并做并做session保存 创建Class OnlineUserListener implements HttpSessionListener
implements HttpSessionListener 需要实现两个方法:
一个是 sessionCreated session的创建事件;
一个是sessionDestroyed session的销毁事件;
以下是代码:
public static HashMap sessionMap = new HashMap();
public void sessionCreated(HttpSessionEvent event) {
// TODO Auto-generated method stub
HttpSession session = event.getSession();
// 初始化当前session
sessionMap.put(session.getId(), session);
}
public void sessionDestroyed(HttpSessionEvent event) {
HttpSession session = event.getSession();
// 判断当前session user是否有值
if (session.getAttribute("user") != null
&& session.getAttribute("user").toString().length() > 0) {
// session销毁清空map 更新map
sessionMap.remove(session.getAttribute("user").toString());
session.invalidate();
}
}
需要在web.xml增加监听
<listener>
<listener-class>com.test.demo.OnlineUserListener</listener-class>
</listener>
public static HashMap sessionMap = new HashMap(); 全局 静态的map 保存的key=sessionId value=session 当前的会话ID是一致的所用使用sessionID做key 故可以在我们的action 或servlet 里面 根据当前sessionID 替换为当前用户登录的user 对象 故当前用户登录时,可通过在map中寻找值来判断当前用户是否已在系统中; 一下是单用户登录跟踢出的操作代码:
String username = request.getParameter("username");
//String password = request.getParameter("password");
HttpSession session = request.getSession();
if (OnlineUserListener.sessionMap.get(username.trim()) != null
&& OnlineUserListener.sessionMap.get(username.trim())
.toString().length() > 0) {
// 当前用户已经在线 删除用户
HttpSession sessionold = (HttpSession) OnlineUserListener.sessionMap.get(username.trim());
// 注销已在线用户session
sessionold.invalidate();
OnlineUserListener.sessionMap.remove(username.trim());
// 清除已在线用户,更新map key 当前用户 value session对象
OnlineUserListener.sessionMap.put(username.trim(), session);
OnlineUserListener.sessionMap.remove(session.getId());
} else {
// 根据当前sessionid 取session对象。 更新map key=用户名 value=session对象 删除map
// key= sessionid
OnlineUserListener.sessionMap.get(session.getId());
OnlineUserListener.sessionMap.put(username.trim(),OnlineUserListener.sessionMap.get(session.getId()));
OnlineUserListener.sessionMap.remove(session.getId());
}
分享到:
相关推荐
自己实现spring-session,实现单点登陆的功能 使用filter拦截用户的请求,在filter中包装request,在request的包装类requestWrapper中,重写getSession(), 和getSession(boolean create)。自己实现httpSession,...
用session记录用户的登录状态 1.登录 2.登录成功后将此“已登录”状态保存。 3.实现“显示员工列表”功能。 4.当用户点击“显示员工列表”的时候,验证用户是否已登录,已登录继续显示员工列表,没有登录则跳转到...
里面包含BS和CS(软件/网页)2种的代码实例,希望能帮到大家
java中使用session模拟用户登陆
用Session实现用户的登陆,界面的购物存储,显示
SpringBoot+MyBatis+SpringSession+Redis实现session共享及单点登录开发实例
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
前后端结合的一个登陆,jdbc+servlet,可以实现单用户的单点登陆,耦合性超低 可以运用到项目之中,有不足的地方还请指出。
用WebStorm工具实现用户登录和退出,用户名用session记录,用户登录过后,session会记录下来用户名字
php实现主界面登陆 退出session操作过程登陆退出 主界面在同一个页面的
基于Session的在线用户统计实现 基于Session的在线用户统计实现
spring session实现session共享
通过spring-session 和redis 达到跨域同应用时 session 统一存储。在应用中实现单点登录操作
shiro+spring+data+session+redis实现单点登录,这是一个不错的案例,学习和参考都是很不错的
本篇文章是对PHP会话(Session)实现用户登陆功能进行了详细的分析介绍,需要的朋友参考下
主要为大家详细介绍了Springboot实现多服务器session共享,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
模拟数据库,以session实现用户登陆功能,配套对应完整登陆注册页面!
正对java Web项目,同浏览器同时打开两个登录窗口(不同Tag),用不同用户登录,为避免使用同一个Session,需要使用这段代码。否则先登录的用户的Session会变成后登录用户的Session.相关系统使用权限也会变。
主要给大家介绍在php中是如何使用session实现保存用户登录信息的,涉及到php session 用户登录等一些知识点,使用session保存用户登录信息要比cookie安全很多。感兴趣的朋友一起学习吧
大概思路就是借助小程序本地储存+网络请求的header可读可写来实现类似浏览器的cookies保存session功能。 直接上代码 function NetRequest({url, data, success, fail, complete, method = POST, header = { '...