日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个判断session是否过期的小技巧

發(fā)布時(shí)間:2023/12/18 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个判断session是否过期的小技巧 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。

Session一直是我們做web項(xiàng)目經(jīng)常使用的,以前沒太注意,這次又細(xì)致的看了下!

?

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

?

2.session的過期時(shí)間是從什么時(shí)候開始計(jì)算的?是從一登錄就開始計(jì)算還是說從停止活動(dòng)開始計(jì)算?

?? 答:從session不活動(dòng)的時(shí)候開始計(jì)算,如果session一直活動(dòng),session就總不會(huì)過期。

???????? 從該Session未被訪問,開始計(jì)時(shí); 一旦Session被訪問,計(jì)時(shí)清0;

?

3.設(shè)置session的失效時(shí)間

?a)web.xml中

?

Xml代碼??
  • <session-config>????
  • ????<session-timeout>30</session-timeout>????
  • </session-config>???
  • ?b)在程序中手動(dòng)設(shè)置

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

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

    Xml代碼??
  • <Context?path="/livsorder"?docBase="/home/httpd/html/livsorder"??
  •   defaultSessionTimeOut="3600"?isWARExpanded="true"??
  •   isWARValidated="false"?isInvokerEnabled="true"??
  •   isWorkDirPersistent="false"/>??
  • ?

    4.如何判斷session過沒過期

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

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

    ?

    ?

    [java]?view plain?copy ?print?
  • private?boolean?checkSession(???HttpServletRequest?request,??
  • HttpServletResponse?response)?{??
  • HttpSession?session?=?request.getSession(false);??
  • String?requestURI?=?request.getRequestURI();??
  • String?contextPath?=?request.getContextPath();??
  • ??
  • requestURI?=?requestURI.substring(contextPath.length());??
  • ??
  • if(requestURI.equals("/")?||??
  • requestURI.equals("/login.jsp")?||??
  • ????requestURI.equals("/login.do")??||??
  • ????requestURI.equals(this.errorPage))??
  • return?true;??
  • ??
  • if(session?!=?null???
  • &&?session.getAttribute(this.objName)?!=?null???
  • &&?session.getAttribute("year")?!=?null)??
  • return?true;??
  • else???
  • return?false;??
  • }??
  • ?

    ?

    ?

    ?

    比較好的一個(gè)辦法

    ?

    [java]?view plain?copy ?print?
  • // request.getSession(false)==null可以近似的判斷是否過期:如果已經(jīng)過期,那么返回的是null,
  • // 但是當(dāng)?shù)谝淮握?qǐng)求,剛剛建立一個(gè)session的時(shí)候,上述方法也返回null???
  • ?
  • //所以應(yīng)該這么做???
  • if(null==request.getSession(false)){???
  • ???if(request.getSession(true).isNew()){???
  • ? ?}???
  • else{???
  • System.out.println("session已經(jīng)過期");???
  • }???
  • }??
  • ?
  • isNew()是指是否一個(gè)新創(chuàng)的session,當(dāng)用戶訪問一個(gè)支持session的jsp網(wǎng)頁時(shí),session被創(chuàng)建,盡管有時(shí)session里面并沒有任何東西。

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的一个判断session是否过期的小技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。