国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

解決J2EE-session在瀏覽器關閉后失效問題

2024-07-13 10:16:59
字體:
來源:轉載
供稿:網友

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

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

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

1.session失效時間:

距離上一次使用該session的時間達到設置的失效時間,session失效

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

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

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

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

session為什么在瀏覽器關閉之后失效了?

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

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

@Controllerpublic 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ù),
  • 但是在瀏覽器關閉后,再次進入主頁面時,還是需要再次登錄,說明瀏覽器端是沒有再次拿到這個session對象的,我們可以在chrome瀏覽器的設置->顯示高級設置->隱私設置的內容設置->所有cookie與網站數(shù)據(jù)中,搜索本地tomcat服務器去查看本次存入的session,即一個名為JSESSIONID的cookie,情況如下

J2EE,瀏覽器,session,失效
J2EE,瀏覽器,session,失效

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

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

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

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,最后,得到了自己想要的結果,session(這個名為JSESSIONID的cookie)逃出了瀏覽器的監(jiān)禁。

總結

以上所述是小編給大家介紹的解決J2EE-session在瀏覽器關閉后失效問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄大仙区| 临洮县| 龙里县| 玉溪市| 淳化县| 呈贡县| 当雄县| 余干县| 独山县| 通河县| 大余县| 社旗县| 原阳县| 武胜县| 肥东县| 水城县| 罗田县| 海林市| 正蓝旗| 禄劝| 皮山县| 东山县| 邮箱| 和田市| 东光县| 壤塘县| 图木舒克市| 老河口市| 临洮县| 西贡区| 额尔古纳市| 中阳县| 徐州市| 桂平市| 都江堰市| 辽源市| 罗山县| 西安市| 卢湾区| 义马市| 通海县|