`
itace
  • 浏览: 172241 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

session唯一登录用户

 
阅读更多

 

页面跳转时才会退出,要主动退出,需要js的定时心跳包

 

	//userid=httpsession
	public static Map<Integer, HttpSession> USERID_SESSIONS = new ConcurrentHashMap<Integer, HttpSession>();
	

 

 

	public static void addLoginUser(HttpServletRequest request,Map<String, Object> user){
		//退出之前的session
		int id = StringUtil.toInt(user.get("id"));
		if (id>0) {
			HttpSession session_old = ChipmunkCache.USERID_SESSIONS.get(id);
			if (session_old!=null) {
				ChipmunkCache.USERID_SESSIONS.remove(id);
				System.out.println("old sessionid:"+session_old.getId());
				System.out.println(session_old.isNew());
				session_old.removeAttribute(SESSION_USER);
				session_old.invalidate();//销毁session,会调用HttpSessionListener的sessionDestroyed
			}
			HttpSession session_new = request.getSession();
			System.out.println("new sessionid:"+session_new.getId());
			session_new.setAttribute(SESSION_USER, user);
			ChipmunkCache.USERID_SESSIONS.put(id, session_new);
		}
		//add(request, SESSION_USER, user);
	}

	public static void removeLoginUser(HttpServletRequest request){
		HttpSession session = request.getSession();
		Map<String, Object> user = getLoginUser(session);
		if (user!=null) {
			int id = StringUtil.toInt(user.get("id")); 
			ChipmunkCache.USERID_SESSIONS.remove(id);
		}
		session.removeAttribute(SESSION_USER);
		//重置sessionid,防漏洞
		try {
			session.invalidate();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

 

public class MySessionListener implements HttpSessionListener{
	
	private static AtomicInteger online_count = new AtomicInteger(0);
	@Override
	public void sessionCreated(HttpSessionEvent event) {
		int count = online_count.incrementAndGet();
		System.out.println("online count:"+count);
		HttpSession session = event.getSession();
//		online_user_map.put(session.getId(), value)
	}
	@Override
	public void sessionDestroyed(HttpSessionEvent event) {
		HttpSession session = event.getSession();
		int count = online_count.decrementAndGet();
		System.out.println("online count:"+count);
		
	}
	
}

 

 

分享到:
评论

相关推荐

    django-利用session机制实现唯一登录的例子

    配置连接数据库 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名称', 'USER': 'root', 'PASSWORD': '123456', ...登录时记住保存用户登录信息 # 登录验证 def logi

    session与cookie.doc的区别

    Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用...

    PHP通过session id 实现session共享和登录验证的代码

    用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了——具体session的共享...

    Cookie、Session、Token、JWT

    Cookie、Session、Token、JWT 是常用于身份验证和状态管理的概念和技术。它们在Web应用程序中起到关键的作用。...当用户登录成功后,服务器会生成一个 Token 并返回给客户端,客户端将该 Token 存储在本地

    仅利用session和application实现聊天室

     用户登录成功后,程序会要求用户选择聊天室。可以不设置用户自行建立聊天室的功能,而且在聊天中途不能从一个聊天室切换到另一个聊天室。  进入聊天室后,用户可以从用户信息窗口看到该聊天室中所有用户的...

    微信小程序登录步骤流程(C#)

    调用wx.login接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)。调用wx.getUserInfo接口将返回的数据会包含 encryptedData, iv 等敏感信息。用户...

    FlaskLogin插件为Flask提供用户会话管理。它处理登录、注销和长时间记住用户会话的常见任务。

    唯一的要求是您的用户对象实现几个方法,并且您提供对扩展的回调,该扩展能够从用户ID加载用户。 Flask-Login Tests coverage Software License Flask-Login provides user session management for Flask. It ...

    利用JSP session对象保持住登录状态

    为此,web服务器必须采用一种机制来唯一地标识一个用户,同时记录该用户的状态,这就要用到会话跟踪技术。 Java Web使用Session来跟踪会话和管理会话内的状态。 Session对象是一个jsp内置对象,它在第一个jsp页面...

    Spring mvc 分步式session的实例详解

    Spring mvc 分步式session的实例详解 Session代表服务器与浏览器的一次会话过程,它的信息是保存在服务器端的。在Servlet中,session指的是...login表示用户跳转到登录页面,这个时候可以生成唯一key为sessionid的ses

    用script跳转方式主动跨域获取cookie或session(并非网上铺天盖地的主动设置法)

    在A域中存放openid.aspx ...sessionid 为每个用户登录到A域后生成的唯一标识。 B域根据这个标识来确定是否更新自己域的cookie,每次更新后都需刷新页面一次,这个刷新动作已经在openid.aspx中完成,不用自己再写。

    单用户登录组件源码

    单用户登录组件源码每个登录的用户分配一个唯一识,这里使用Guid写到cookie里,注意把这个cookie设置成httponly的,当然如果你在程序里使用了Session,那么Session.SessionID就可以用来唯一标识一个用户了,Session....

    详解ASP.NET中Session的用法

     通过向客户程序发送唯一的 Cookie 可以管理服务器上的 Session 对象。当用户第一次请求 ASP 应用程序中的某个页面时,ASP 要检查 HTTP 头信息,查看是否有在报文中有名为 ASPSESSIONID 的 Cookie 发送过来,如果有...

    CodeIgniter配置之SESSION用法实例分析

    由于HTTP协议本身是无状态的,所以当保留某个用户的访问状态信息时,需要客户端有一个唯一标识传给服务端,这个唯一标识就是SESSION ID,存放在客户端的COOKIE中,然后服务端根据该标识读取存放的用户状态信息,达到...

    解析php中session的实现原理以及大网站应用应注意的问题

    PHP SESSION原理我们知道,session是在服务器端保持用户会话数据的一种方法,对应的cookie是 在客户端保持用户数据。HTTP协议是一种无状态协议,服务器响应完之后就失去了与浏览器的联系,最早,Netscape将cookie...

    详解C# 中Session的用法

    当每 个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用 户的唯一身份。这个SessionID是由WWW服务器随机产生的一个由24个字符组成...

    新手菜鸟必读:session与cookie的区别

    session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进程关闭之后,session也就“消失”了,而cookie更多地被用于标识用户,它可以是长久的,用于用户跟踪和识别唯一用户(Unique Visi

    Zend Framework实现多服务器共享SESSION数据的方法

    本文实例讲述了Zend Framework实现多服务器...在客户端(如浏览器)登录网站时,被访问的 PHP 页面可以使用 session_start() 打开 SESSION,这样就会产生客户端的唯一标识 SESSION ID(此 ID 可通过函数 session_id

    ASP.NET中在不同的子域中共享Session的具体方法

    今天遇到了这个问题,...Session在服务器端是以散列表的形式存在的,区分每一个Session是通过SessionID来实现的,所以可以说这个SessionID是一个Key是一个全局唯一的值。我们可以通过ASP.NET来打印出SessionID,如下

    PHP中SESSION的注销与清除

    2、session_start()初始化session,第一次访问会生成一个唯一会话ID保存在客户端(是基于cookie保存的),用户下次访问时,session_start()会检查有没有会话ID,如果有浏览器会带着这个会话ID过来(通过发送头文件传...

    SessionBox:多次登录网站-Cookie选项卡隔离

    SessionBox / MultiLogin 多次登录网站-使用JavaScript的Cookie网站隔离。...服务器端确保在用户登录时创建了新的用户ID(即使cookie已经存在)。 PHP中的一个示例: session_name ( 'COOKIE1' );$ newid = ses

Global site tag (gtag.js) - Google Analytics