一個判斷session是否過期的小技巧

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

Session一直是我們做web項目經常使用的,以前沒太注意,這次又細致的看了下!

?

1.session其實就是一個Map,鍵=值對,通過session.getAttribute("name");獲得session中設置的參數

?

2.session的過期時間是從什么時候開始計算的?是從一登錄就開始計算還是說從停止活動開始計算?

?? 答:從session不活動的時候開始計算,如果session一直活動,session就總不會過期。

???????? 從該Session未被訪問,開始計時; 一旦Session被訪問,計時清0;

?

3.設置session的失效時間

?a)web.xml中

?

Xml代碼??收藏代碼
  1. <session-config>????
  2. ????<session-timeout>30</session-timeout>????
  3. </session-config>???

?b)在程序中手動設置

??? session.setMaxInactiveInterval(30 * 60);//設置單位為秒,設置為-1永不過期

c)tomcat也可以修改session過期時間,在server.xml中定義context時采用如下定義:

Xml代碼??收藏代碼
  1. <Context?path="/livsorder"?docBase="/home/httpd/html/livsorder"??
  2.   defaultSessionTimeOut="3600"?isWARExpanded="true"??
  3.   isWARValidated="false"?isInvokerEnabled="true"??
  4.   isWorkDirPersistent="false"/>??

?

4.如何判斷session過沒過期

request.getSeesion(boolean)方法,一下子讓我恍然大悟。這個方法里面傳了一個boolean值,這個值如果是true,那么如果當前的request的session不可用,那么就創建新的會話,如果存在就返回當前的會話。如果參數是false,那么在request的當前會話不存在的時候就返回null。
這樣我們就可以很容易的聯想到這個所謂的request的當前會話是否存在和session過期的聯系,所以我們就可以“近似地”認為session不存在就是session過期了,那么我們就可以很容易地判斷session是否過期了。方法如下:
if(request.getSession(false)==null)
???System.out.println("Session?has?been?invalidated!");
else
???System.out.println("Session?is?active!");

可能大家注意到我上面有一個“近似地”字眼,也就是說存在特別情況。
這個特殊情況就是第一次請求還沒有創建會話的時候,那么用這個方法返回的仍然是null,原因我想大家應該是顯然的。

?

?

[java]?view plain?copy
?print?
  1. private?boolean?checkSession(???HttpServletRequest?request,??
  2. HttpServletResponse?response)?{??
  3. HttpSession?session?=?request.getSession(false);??
  4. String?requestURI?=?request.getRequestURI();??
  5. String?contextPath?=?request.getContextPath();??
  6. ??
  7. requestURI?=?requestURI.substring(contextPath.length());??
  8. ??
  9. if(requestURI.equals("/")?||??
  10. requestURI.equals("/login.jsp")?||??
  11. ????requestURI.equals("/login.do")??||??
  12. ????requestURI.equals(this.errorPage))??
  13. return?true;??
  14. ??
  15. if(session?!=?null???
  16. &&?session.getAttribute(this.objName)?!=?null???
  17. &&?session.getAttribute("year")?!=?null)??
  18. return?true;??
  19. else???
  20. return?false;??
  21. }??

?

?

?

?

比較好的一個辦法

?

[java]?view plain?copy
?print?
  1. // request.getSession(false)==null可以近似的判斷是否過期:如果已經過期,那么返回的是null,
  2. // 但是當第一次請求,剛剛建立一個session的時候,上述方法也返回null???
  3. ?
  4. //所以應該這么做???
  5. if(null==request.getSession(false)){???
  6. ???if(request.getSession(true).isNew()){???
  7. ? ?}???
  8. else{???
  9. System.out.println("session已經過期");???
  10. }???
  11. }??
  12. ?

isNew()是指是否一個新創的session,當用戶訪問一個支持session的jsp網頁時,session被創建,盡管有時session里面并沒有任何東西。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451069.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451069.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451069.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

擴展方法

擴展方法是寫在靜態類中&#xff0c;且方法是靜態方法。 不限制參數的數量。 不限制返回類型。 不限制可使用擴展方法的類型。 和普通方法編寫相似&#xff0c;唯一不同的是每一個擴展方法都必須有一個固定的參數。statc void Method&#xff08; this DataType name&#xff0…

cpu執行命令方式

(一)有序處理器 早期的處理器為有序處理器&#xff08;In-order processors&#xff09;&#xff0c;有序處理器處理指令通常有以下幾步&#xff1a; 指令獲取如果指令的輸入操作對象&#xff08;input operands&#xff09;可用&#xff08;例如已經在寄存器中了&#xff09…

jQuery基礎-事件

只能添加一個處理函數&#xff0c;后面的會覆蓋前面 會有兼容性差異 冒泡 會依次檢查父元素 截獲冒泡 或者 最大的缺陷 并且在IE和NetSpace里面分別為冒泡和捕獲兩種 多個處理函數 依次執行 捕獲--->自己--->冒泡 true 只捕獲&#xff0c;不冒泡 false 只冒泡 從父元素的…

別的AI還在打游戲,這個AI已經當上“超級馬里奧”游戲策劃了|GECCO最佳論文

AI打游戲已經不是什么新鮮事了&#xff0c;“沉迷”Dota 2、星際爭霸、LOL的AI一個接一個的出現。 但是你也許不知道&#xff0c;相比這些“游戲玩家”AI&#xff0c;還有一位優秀的AI&#xff0c;直接當起了“游戲策劃”&#xff0c;做的還是膾炙人口的“超級馬里奧”。 &…

單點登錄的三種實現方式

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 單點登錄SSO&#xff08;Single Sign On&#xff09;說得簡單點就是在一個多系統共存的環境下&#xff0c;用戶在一處登錄后&#xff0c;…

快速判斷數組中每個對象同一屬性值是否相同

做批量查詢的時候&#xff0c;要確定數組中的多個對象下的字符串是否能全部匹配&#xff0c;這時需要在匹配的名稱對象中通過字段記錄該名稱是否匹配。 const search [ { name: B, isExistence: false },{ name: C, isExistence: false } ]; 這時要確定 search 是否全部匹配上…

java對象占用內存大小?

一個不包含任何內部成員變量的空Object大約占33byte&#xff0c;若增加成員變量&#xff0c;則增加相應大小的內存占用。 測算方式&#xff1a;設置jvm的堆大小為1m&#xff0c;在堆中不停new不含任何成員變量的OOMObject對象&#xff0c;直到堆內存溢出。如下圖&#xff0c;在…

Java程序員面試中的多線程問題

很多核心Java面試題來源于多線程(Multi-Threading)和集合框架(Collections Framework)&#xff0c;理解核心線程概念時&#xff0c;嫻熟的實際經驗是必需的。這篇文章收集了 Java 線程方面一些典型的問題&#xff0c;這些問題經常被高級工程師所問到。 0.Java 中多線程同步是什…

SpringBoot2使用WebFlux函數式編程

本文只是簡單使用SpringBoot2使用WebFlux的函數式編程簡單使用&#xff0c;后續會繼續寫關于Webflux相關的文章。 最近一直在研究WebFlux&#xff0c;后續會陸續出一些相關的文章。 首先看一下Srping官網上的一張圖&#xff0c;對比一下SpringMvc和Spring WebFlux&#xff0c;如…

單點登錄原理與簡單實現

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、單系統登錄機制 1、http無狀態協議 web應用采用browser/server架構&#xff0c;http作為通信協議。http是無狀態協議&#xff0c;瀏…

java接口類支持多繼承

一個類只能extends一個父類&#xff0c;只能有一個父類&#xff0c;但可以implements多個接口。java通過使用接口的概念來取代C中多繼承。與此同時&#xff0c;一個接口則可以同時extends多個接口&#xff0c;卻不能implements任何接口。Java中的接口是支持多繼承的。

xmind-HTTP協議

轉載于:https://www.cnblogs.com/margot921/p/9764788.html

彈性布局

彈性布局 一、Flex布局是什么&#xff1f; Flex是Flexible Box的縮寫&#xff0c;意為”彈性布局”&#xff0c;用來為盒狀模型提供最大的靈活性。任何一個容器都可以指定為Flex布局。 二、基本概念 采用Flex布局的元素&#xff0c;稱為Flex容器&#xff08;flex container&…

Java-Type簡單分類

&#xff08;1&#xff09;ParameterizedType&#xff1a; 參數化類型&#xff0c;例如List<T>。 &#xff08;2&#xff09;GenericArrayType&#xff1a; 泛型數組類型&#xff0c;例如T[]。 &#xff08;3&#xff09;TypeVariable&#xff1a; 泛型的類型變量&a…

解決dataTable 報錯:cannot read property “style“ of undefined

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 其實這錯&#xff0c;我之前也遇到過&#xff0c;只是太久了&#xff0c;沒有記錄下來&#xff0c; 今天看到群里朋友也遇到這個錯誤&a…

萬惡之源 - Python基礎數據類型一

整數 整數在Python中的關鍵字用int來表示; 整型在計算機中運于計算和比較 在32位機器上int的范圍是: -2**31&#xff5e;2**31-1&#xff0c;即-2147483648&#xff5e;2147483647 在64位機器上int的范圍是: -2**63&#xff5e;2**63-1&#xff0c;即-9223372036854775808&…

談談對于技術面試的心得體驗

導讀&#xff1a;作者lzprgmr寫了一篇《談談技術面試》文章&#xff0c;他在文中講述了自己對于技術人員面試的經驗和心得&#xff0c;以下是文章內容&#xff1a; 只要是招一個技術人員&#xff0c;不管是初級的程序員還是高級軟件工程師&#xff0c;技術上的考核都必不可少。…

es6中class類的全方面理解(三)------靜態方法

不需要實例化類&#xff0c;即可直接通過該類來調用的方法&#xff0c;即稱之為“靜態方法”。將類中的方法設為靜態方法也很簡單&#xff0c;在方法前加上static關鍵字即可。這樣該方法就不會被實例繼承&#xff01; class Box{static a(){return "我是Box類中的&#xf…

jackson/fastJson boolean類型問題

1.我們以Person對象舉個栗子&#xff0c;person有三個屬性。name&#xff0c;age和isGay Data public class Person {public Person(String name, int age, boolean isGay) {this.name name;this.age age;this.isGay isGay;}private String name;private Integer age;priva…

django模板系統(下)

主要內容&#xff1a;母版&#xff0c;繼承母版&#xff0c;塊&#xff0c;組件&#xff0c;靜態文件 母版 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"x-ua-compatible" conten…