iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 14
1
自我挑戰組

30 days JSP & Servlet學習紀錄 系列 第 14

[Day 14] Session 機制 part1

前言

本來要準備來開始JSP的部分了
但翻書才發現還有session的部分
今天就來整理一下Session
範圍為本書的ch6


HttpSession

  • 定義
    提供可以針對特定cilent保存多個request的對話機制,將cilent完整的存在記憶體

  • 如何運作
    透過SessionID來提供Container辨識
    而Container透過Cookie和client交換SessionID
    也就是說
    Session ID會存在於cookie裡給server和client去做辨識

    在程式裡取得Session Cookie的方式為:

    //for request
    HttpSession session = request.getSession();
    //for response
     HttpSession session = request.getSession();
    

    由於request.getSession()只是取得的session
    但無法提供是否為新建的,因此需要下列這些方法得知

    //solve 1
    //for request
    HttpSession session = request.getSession();
    //isNew提供目前取得的session在cilent是否有用過
    //若有則會回傳false,若沒有則會回傳true
    if(session.isNew())
    {
    //寫入邏輯
    }
    
    //solve 2
    //for request
    //傳入false變數代表指定回傳預先存在的session
    //若之前不存在則session會變成null
    HttpSession session = request.getSession(false);  
    
    if(session ==null)
    {
    //代表是新建立的session
    session = response.getSession();
    }
    
  • URL重寫
    當遇到cilent把儲存cookie的功能關掉時
    需要用到URL重寫的機制來存取sessionID
    這裡有介紹到兩個方法(接在response裡使用)

    response.encodeURL
    response.encodeRedirctURL()

    搭配getSession使用的順序為:

    當container看見getSession()呼叫,而且沒有從cilent的request取得sessionID
    就會知道必須為這個cilent產生新的Session
    在這個時間點,Container不清楚Cookie是否能夠,所以在第一次傳送response給cilent時
    cookie和URL重寫兩種都會做

HttpSession Interface

Container提供了幾種方式可以操作session將他丟棄:

  • getCreateionTime()
    計算session到目前為止存活的時間

  • getLastAccessendTime()
    找出cilent最後一次存取session的時間

  • setMaxInactiveInterval()
    設定在指定的時間內若沒有收到session的request,就直接銷毀

  • getMaxInactiveInterval()
    取得session可以多久不接受request 或是response
    用來判斷session再被結束前還有多少時間

  • invalidate()
    直接將目標session給丟棄的方法

設定session的逾時有三種方式:

  • 1.DD裡面設定
    以分鐘為單位,這裡也是設定在全域的範圍內

    web.xml

    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>
    </web-app>
    
  • 2.直接在程式裡設定
    此做法可以針對特定的session去做處理
    這裡則是用秒作為單位,所以要再*60

    //設定10分鐘
    session.setMaxInactiveInterval(10*60)
    
  • 3.直接停掉server
    也就是直接重啟tomcat,session也會被清除


小結

今天先整理一部分session的內容
明天會再提到cookie和Session遷移的部分


上一篇
[Day 13] Filter 練習
下一篇
[Day 15]Session 機制 part2
系列文
30 days JSP & Servlet學習紀錄 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言