最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決J2EE-session在瀏覽器關(guān)閉后失效問題

 更新時間:2018年01月19日 10:27:01   作者:Juses_331  
最近做項目使用的是Spring+SpringMVC+Mybatis框架,maven管理目錄的javaweb端系統(tǒng),對于session的一些問題,在此小編給大家分享到腳本之家平臺,需要的朋友參考下吧

前幾天在做一個簽到系統(tǒng)時,遇到了喜聞樂見的session問題,項目為Spring+SpringMVC+Mybatis框架,maven管理目錄的javaweb端系統(tǒng),對于session的一些問題,作出以下分析,在這里,著重討論session生命周期的問題,至于其他定義,不做解釋:

首先,說明一下session的生命周期:

存儲:Session存儲在服務(wù)器端,一般為了防止在服務(wù)器的內(nèi)存中(為了高速存?。琒essinon在用戶訪問第一次訪問服務(wù)器時創(chuàng)建,需要注意只有訪問JSP、Servlet等程序時才會創(chuàng)建Session,只訪問HTML、IMAGE等靜態(tài)資源并不會創(chuàng)建Session。在一個javaweb應(yīng)用中,可調(diào)用request.getSession(boolean xxx)生成Session。注意,boolean型參數(shù)為true時,在此處強制生成一個新的session。

1.session失效時間:

距離上一次使用該session的時間達(dá)到設(shè)置的失效時間,session失效

2.還有一種是方法 session.invalidate()被執(zhí)行,主動使得session失效

對于失效時間,可以通過配置web.xml中的屬性來定義:

 <session-config>
 <session-timeout>失效時間</session-timeout>
 </session-config>

失效時間單位為分鐘,若要使session有效時間為一天,則可以設(shè)為60*24,當(dāng)設(shè)置為0或負(fù)數(shù)時,session永久有效,根據(jù)失效時間的定義,很容易理解這一情況。

session為什么在瀏覽器關(guān)閉之后失效了?

  • 未設(shè)置session失效時間,默認(rèn)為瀏覽器關(guān)閉后失效;
  • 大部分的session機制都是采用進(jìn)程中的cookie來保存sessionid的,也就是JSESSIONID,瀏覽器關(guān)閉后進(jìn)程消失,進(jìn)程中的cookie消失,那么sessionid也就跟著消失了。

根據(jù)已知的內(nèi)容,寫了一個簡單的例子:

@Controller
public class SessionTest {
 @RequestMapping("/sessionTest")
 public String sessionTest(HttpServletRequest request, HttpServletResponse response){
  System.out.println("success!");
  HttpSession session = request.getSession();
  session.setMaxInactiveInterval(259200);
  request.setAttribute("creationtime",session.getCreationTime());//創(chuàng)建時間
  request.setAttribute("id",session.getId());//id
  request.setAttribute("max",session.getMaxInactiveInterval(-1));//最大失效時間
  //在這里,MaxInactiveInterval的優(yōu)先級高于web.xml中的session-cofig,單位為秒
  request.setAttribute("lasttime",session.getLastAccessedTime());//上次使用時間
  request.setAttribute("sessionTest",session);
//  System.out.println(session.getCreationTime());
//  System.out.println(session.getMaxInactiveInterval());
//  System.out.println(session.getLastAccessedTime());
  return "page/showSession";
 }
 <table border="1" cellspacing="0" cellpadding="0">
  <tr><td>創(chuàng)建時間:</td><td>${creationtime}</td></tr>
  <tr><td>id:</td><td>${id}</td></tr>
  <tr><td>最大存活時間:</td><td>${max}</td></tr>
  <tr><td>上次使用時間:</td><td>${lasttime}</td></tr>
  <tr><td>session:</td><td>${sessionTest}</td></tr>
 </table>

解析:

  • 上面的代碼模擬了一次登錄情況,控制器中,創(chuàng)建了一個HttpSession對象,基本設(shè)置了所有能設(shè)置的參數(shù),
  • 但是在瀏覽器關(guān)閉后,再次進(jìn)入主頁面時,還是需要再次登錄,說明瀏覽器端是沒有再次拿到這個session對象的,我們可以在chrome瀏覽器的設(shè)置->顯示高級設(shè)置->隱私設(shè)置的內(nèi)容設(shè)置->所有cookie與網(wǎng)站數(shù)據(jù)中,搜索本地tomcat服務(wù)器去查看本次存入的session,即一個名為JSESSIONID的cookie,情況如下

瀏覽器情況
輸出

可見,session的失效時間其實還是在瀏覽器關(guān)閉時,所以只有瀏覽器不關(guān)閉再次訪問的情況,才能繼續(xù)使用登錄狀態(tài),到底上面我們所設(shè)置的失效時間代表的是什么?

瀏覽器和服務(wù)器之間創(chuàng)建了一個Session,由于客戶端長時間(休眠時間)沒有與服務(wù)器交互,服務(wù)器將此Session銷毀,客戶端再一次與服務(wù)器交互時之前的Session就不存在了,我的理解是,失效時間只生效在一次會話過程中,若瀏覽器關(guān)閉,會話結(jié)束,其實失效時間設(shè)置為永久有效,就是到瀏覽器關(guān)閉,會話關(guān)閉的那個時刻。要解決這個問題,可以把cookie與session混用,有這么的笨辦法:

主動添加Cookie,設(shè)置保存目錄與存活時間

public static void addCookie(String name, String value, int age, HttpServletResponse response) throws
   UnsupportedEncodingException {
  Cookie c = new Cookie(name, URLEncoder.encode(value, "utf-8"));
  c.setMaxAge(age);
  c.setPath(path);
  response.addCookie(c);
 }

在再次訪問時,使用Cookie[] cookies = request.getCookies();遍歷cookie,根據(jù)cookie的名字獲取想要的cookie,也可說是session,最后,得到了自己想要的結(jié)果,session(這個名為JSESSIONID的cookie)逃出了瀏覽器的監(jiān)禁。

總結(jié)

以上所述是小編給大家介紹的解決J2EE-session在瀏覽器關(guān)閉后失效問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 如何在Netty中注解使用Service或者M(jìn)apper

    如何在Netty中注解使用Service或者M(jìn)apper

    這篇文章主要介紹了如何在Netty中注解使用Service或者M(jìn)apper,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java Swing JTextField文本框的代碼示例

    Java Swing JTextField文本框的代碼示例

    這篇文章主要介紹了Java Swing JTextField文本框的代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例

    關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例

    這篇文章主要介紹了關(guān)于SpringBoot集成Lettuce連接Redis的方法和案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一文搞懂Java創(chuàng)建線程的五種方法

    一文搞懂Java創(chuàng)建線程的五種方法

    本文主要為大家詳細(xì)介紹一下Java實現(xiàn)線程創(chuàng)建的五種常見方式,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定的幫助,感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-06-06
  • spring boot security 沒有合適的構(gòu)造器問題

    spring boot security 沒有合適的構(gòu)造器問題

    這篇文章主要介紹了spring boot security 沒有合適的構(gòu)造器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java日期操作類常見用法示例

    Java日期操作類常見用法示例

    這篇文章主要介紹了Java日期操作類常見用法,結(jié)合實例形式分析了java針對日期時間的獲取、轉(zhuǎn)換常見操作技巧,需要的朋友可以參考下
    2019-07-07
  • 在eclipse中使用SVN的實現(xiàn)方法(圖文教程)

    在eclipse中使用SVN的實現(xiàn)方法(圖文教程)

    這篇文章主要介紹了在eclipse中使用SVN的實現(xiàn)方法(圖文教程),文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java中帶參數(shù)的try(){}語法含義詳解

    java中帶參數(shù)的try(){}語法含義詳解

    這篇文章主要介紹了java中帶參數(shù)的try(){}語法含義詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java編寫緩存工具類的示例代碼

    Java編寫緩存工具類的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何基于Java編寫一個緩存工具類,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以了解一下
    2023-07-07
  • java的引用類型的詳細(xì)介紹

    java的引用類型的詳細(xì)介紹

    在java中提供了4個級別的引用:強引用、軟引用、弱引用、虛引用。其中強引用FinalReference是default個飾符來修飾,其它3個級別均為public修飾
    2013-10-10

最新評論

东丰县| 育儿| 曲靖市| 柘城县| 郧西县| 眉山市| 怀集县| 兴业县| 陇西县| 邢台市| 清徐县| 顺义区| 乌拉特后旗| 金湖县| 福州市| 开封县| 黄山市| 巨鹿县| 望奎县| 阜新市| 栾城县| 葫芦岛市| 贵州省| 乐业县| 洞口县| 黄石市| 河南省| 云和县| 灵璧县| 斗六市| 淄博市| 丰台区| 东乌| 安溪县| 台北市| 兴安县| 新巴尔虎右旗| 抚松县| 新乡县| 山丹县| 铜陵市|