激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - application作用域實現用戶登錄擠掉之前登錄用戶代碼

application作用域實現用戶登錄擠掉之前登錄用戶代碼

2021-02-03 11:21渡劫錦官城 Java教程

這篇文章主要介紹了application作用域實現用戶登錄擠掉之前登錄用戶代碼,具有一定參考價值,需要的朋友可以了解下。

一、實現思想

1.application(ServletContext)是保存在服務器端的作用域,我們在application中保存兩種形式的鍵值對:1:<userId, sessionId>,2:<sessionId, session>

2.每當一個用戶登錄時(將生成一個新的session),首先根據userId在application中查詢sessionId:

  如果沒有查詢到sessionId,說明還沒有用戶登錄此賬號,那么將<userId, sessionId>和<sessionId, session>兩個數據保存到application中

  如果查詢到了sessionId,說明已經有用戶登錄了,那么將執行以下3個步驟:

    1)先拿到已經登錄的那個session,使其失效

    2)再將原來的session從application中刪除,將新的session保存到application中(<sessionId, session>)

    3)最后將原來的sessionId從application中刪除,將新的sessionId保存到application(<userId, sessionId>)

二、實現登錄功能的handler的編碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@RequestMapping("/login")
 public String login(HttpServletRequest request, HttpServletResponse response, Map<String, Object> map) throws Exception{
  String userName = request.getParameter("userName");
  String password = request.getParameter("password");
  HttpSession session = request.getSession();
  ServletContext application = session.getServletContext(); //獲取application
  
  User user = new User(userName, password);
  User currentUser = userService.login(user);
  if (currentUser == null) {
   request.setAttribute("error", "用戶名或密碼錯誤");
   return "login";
  }
  
  String userId = String.valueOf(currentUser.getId()); //獲取userId
  map.put("currentUser", currentUser); //將user保存到session中,注意要使用@SessionAttributes注釋
  if(application.getAttribute("userId") == null){ //說明還沒有用戶登錄
   application.setAttribute(userId, session.getId()); //將sessionId保存到application
   application.setAttribute(session.getId(), session); //將session保存到application
  }else{ //說明已經有用戶登錄
   String sessionId = (String) application.getAttribute(userId); //根據userId獲取上一個用戶的sessionId
   HttpSession oldSession = (HttpSession) application.getAttribute(sessionId); //根據sessionId獲取上一個用戶的session
   oldSession.invalidate(); //使oldSession失效
   application.removeAttribute(oldSession.getId()); //將oldSession從application中移除
   application.setAttribute(session.getId(), session); //將新的session保存到application
   application.removeAttribute(userId); //將oldSession的id從application中移除
   application.setAttribute(userId, session.getId()); //將新的session的Id保存到application
  }
  return "main";
 }

三、總結

1.請注意為什么要特意使用<userId, sessionId>將sessionId保存起來?

  因為,當第二個用戶登錄時,我們要使第一個用戶的session失效,就必須要拿到第一個用戶的sessionId,所以我們需要將sessionId通過<userId, sessionId>的形式保存起來,才能通過userId找到第一個用戶的sessionId,從而找到第一個用戶的session,使其失效

以上就是本文關于application作用域實現用戶登錄擠掉之前登錄用戶代碼的全部內容,希望對大家有所幫助。有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!

原文鏈接:http://www.cnblogs.com/javafucker/p/7726202.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 91美女福利视频 | 色啪综合| 羞羞网站 | 999精品国产 | 色视频欧美 | 黄色av免费电影 | 久久精品中文字幕一区二区 | 免费网站看v片在线a | 国产精品视频海角社区88 | 色吧久久 | 精品一区二区三区欧美 | 国产中文99视频在线观看 | 一级做人爱c黑人影片 | 国产一级大片在线观看 | 亚洲一区二区三区四区精品 | 国产 视频 一区二区 | 国产无限资源在线观看 | 毛片电影在线看 | 成人午夜毛片 | 国产无区一区二区三麻豆 | 天天干天天碰 | 香蕉久久久久久 | 日韩黄色av网站 | 久久久免费 | 九九热在线视频观看 | 九九热精品免费视频 | 12av毛片 | 免费特黄 | 一级性生活免费视频 | 国产精品亚洲精品日韩已方 | 国产一级在线看 | 欧美一区2区三区4区公司二百 | 中文字幕11| 午夜影视一区二区 | 成人午夜在线免费 | 99成人在线 | vidz 98hd| 午夜精品福利视频 | 日韩精品一区二区久久 | 一级毛片高清 | 91一区二区在线观看 |