一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - JAVA教程 - 解決J2EE-session在瀏覽器關閉后失效問題

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

2021-03-24 15:04Juses_331 JAVA教程

最近做項目使用的是Spring+SpringMVC+Mybatis框架,maven管理目錄的javaweb端系統,對于session的一些問題,在此小編給大家分享到腳本之家平臺,需要的朋友參考下吧

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

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

存儲:session存儲在服務器端,一般為了防止在服務器的內存中(為了高速存取),sessinon在用戶訪問第一次訪問服務器時創建,需要注意只有訪問jsp、servlet等程序時才會創建session,只訪問html、image等靜態資源并不會創建session。在一個javaweb應用中,可調用request.getsession(boolean xxx)生成session。注意,boolean型參數為true時,在此處強制生成一個新的session。

1.session失效時間:

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

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

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

?
1
2
3
<session-config>
<session-timeout>失效時間</session-timeout>
</session-config>

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

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

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

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

?
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
@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());//創建時間
  request.setattribute("id",session.getid());//id
  request.setattribute("max",session.getmaxinactiveinterval(-1));//最大失效時間
  //在這里,maxinactiveinterval的優先級高于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>創建時間:</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>

解析:

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

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

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

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

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

?
1
2
3
4
5
6
7
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,根據cookie的名字獲取想要的cookie,也可說是session,最后,得到了自己想要的結果,session(這個名為jsessionid的cookie)逃出了瀏覽器的監禁。

總結

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

原文鏈接:http://blog.csdn.net/No_Endless/article/details/51979768

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看a毛片一区二区不卡 | 国产精品igao视频网网址 | 欧美成人第一页 | 日韩在线视频免费观看 | 男男18视频免费网站 | 视频一区二区国产无限在线观看 | 亚洲国产区中文在线观看 | 欧美日韩一区二区三区免费 | 免费看黄色一级 | 欧美精品久久久久久久影视 | 女烈受刑重口小说 | 国产第一福利影院 | 菠萝视频在线完整版 | 操骚0 | 亚洲男人的天堂网 | 亚洲国产剧情中文视频在线 | 亚洲第一二三四区 | 憋尿调教绝望之岛 | 欧美性一级交视频 | 3d动漫美女被吸乳羞羞有 | 日本精品一卡二卡≡卡四卡 | 男人最爱看的网站 | 91禁漫 | 久久中文字幕亚洲 | 国产欧美曰韩一区二区三区 | 国产精品久久久久久久久齐齐 | 我的奶头被客人吸的又肿又红 | 日本老师动漫 | 九9热这里只有真品 | 扒开黑女人p大荫蒂老女人 扒开大腿狠狠挺进视频 | 80s在线| 隔壁老王国产在线精品 | china中国xxxxfree| 四虎在线永久视频观看 | 超级碰碰免费视频 | 久久一本岛在免费线观看2020 | 香蕉 在线播放 | 日韩福利网站 | 天仙tv微福视频 | 欧美精品国产一区二区三区 | 久久久大香菇 |