欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

首先,說(shuō)明一下session的生命周期:

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

1.session失效時(shí)間:

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

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

對(duì)于失效時(shí)間,可以通過(guò)配置web.xml中的屬性來(lái)定義:

 <session-config>
 <session-timeout>失效時(shí)間</session-timeout>
 </session-config>

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

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

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

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

@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)建時(shí)間
  request.setAttribute("id",session.getId());//id
  request.setAttribute("max",session.getMaxInactiveInterval(-1));//最大失效時(shí)間
  //在這里,MaxInactiveInterval的優(yōu)先級(jí)高于web.xml中的session-cofig,單位為秒
  request.setAttribute("lasttime",session.getLastAccessedTime());//上次使用時(shí)間
  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)建時(shí)間:</td><td>${creationtime}</td></tr>
  <tr><td>id:</td><td>${id}</td></tr>
  <tr><td>最大存活時(shí)間:</td><td>${max}</td></tr>
  <tr><td>上次使用時(shí)間:</td><td>${lasttime}</td></tr>
  <tr><td>session:</td><td>${sessionTest}</td></tr>
 </table>

解析:

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

瀏覽器情況
輸出

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

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

主動(dòng)添加Cookie,設(shè)置保存目錄與存活時(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);
 }

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

總結(jié)

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

相關(guān)文章

  • Java中的private修飾符失效了?

    Java中的private修飾符失效了?

    這篇文章主要介紹了Java中的private修飾符失效了?本文討論在一個(gè)內(nèi)部類里面可以訪問(wèn)外部類的private成員變量或者方法的一種現(xiàn)象,需要的朋友可以參考下
    2015-01-01
  • Java 9中如何對(duì)IntegerCache進(jìn)行修改詳解

    Java 9中如何對(duì)IntegerCache進(jìn)行修改詳解

    這篇文章主要給大家介紹了關(guān)于Java 9中如何對(duì)IntegerCache進(jìn)行修改的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用java9具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧。
    2017-12-12
  • mybatisplus如何解決分頁(yè)最多500條數(shù)據(jù)

    mybatisplus如何解決分頁(yè)最多500條數(shù)據(jù)

    這篇文章主要介紹了mybatisplus如何解決分頁(yè)最多500條數(shù)據(jù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn)代碼

    Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Springboot實(shí)現(xiàn)人臉識(shí)別與WebSocket長(zhǎng)連接的實(shí)現(xiàn),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 微信支付之公眾號(hào)支付(java實(shí)現(xiàn))

    微信支付之公眾號(hào)支付(java實(shí)現(xiàn))

    這篇文章主要介紹了微信支付之公眾號(hào)支付(java實(shí)現(xiàn)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break

    Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break

    這篇文章主要介紹了Java循環(huán)結(jié)構(gòu)之多重循環(huán)及continue?break,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-09-09
  • Spring中的@ExceptionHandler異常攔截器

    Spring中的@ExceptionHandler異常攔截器

    這篇文章主要介紹了Spring中的@ExceptionHandler異常攔截器,Spring的@ExceptionHandler可以用來(lái)統(tǒng)一處理方法拋出的異常,給方法加上@ExceptionHandler注解,這個(gè)方法就會(huì)處理類中其他方法拋出的異常,需要的朋友可以參考下
    2024-01-01
  • springboot 整合郵件發(fā)送功能

    springboot 整合郵件發(fā)送功能

    這篇文章主要介紹了springboot 整合郵件發(fā)送功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Spring Boot 日志配置方法(超詳細(xì))

    Spring Boot 日志配置方法(超詳細(xì))

    默認(rèn)情況下,Spring Boot會(huì)用Logback來(lái)記錄日志,并用INFO級(jí)別輸出到控制臺(tái)。下面通過(guò)本文給大家介紹Spring Boot 日志配置方法詳解,感興趣的朋友參考下吧
    2017-07-07
  • spring/springboot整合curator遇到的坑及解決

    spring/springboot整合curator遇到的坑及解決

    這篇文章主要介紹了spring/springboot整合curator遇到的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評(píng)論