iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 15
0

前言

針對昨天的主題
今天再多整理其他內容


Cookie

主要的功用是用來協助處裡Session的狀態
而在Servlet API提供了幾個方式來針對cookie去做其他的處理

  • 建立新的cookie
Cookie mycookie = new Cookie("myName",name);
  • 設定cookie存在cilent多久
 mycookie.sertMaxAge(30*60)
 //單位為秒數所以*60表示分鐘
 //setMaxSge(-1)表示瀏覽器關閉cookie就消失
  • 取出cookie
Cookie[] arraycookies = request.getCookies();
for(int i =0;i<arraycookies.length;i++)
 { 
  Cookie myNowCookie = arraycookies[i];
  if(myNowCookie.getName().equals("myName"))
   {
    //取得我們要的cookie的值
    String myName = myNowCookie.getValue();
    break;
   }
 }
  • addCookie(cookie)
    可以用此方法指定response時在head上面增加set-cookie的回應
Cookie mycookie = new Cookie("myName",name);
response.addCookie(mycookie);//沒有setCookie()這個method

Session 遷移

Session生命週期事件如下

  • 和週期有關HttpSessionListener
    事件類型:HttpSessionEvent
    用途:
    Session健立即被銷毀時

  • 和屬性有關的HttpSessionAttributesListener
    事件類型:HttpSessionBindingEvent
    用途:
    新增setAttribute()
    移除removeAttribute()
    update在既有的屬性在執行setAttribute()

    其中這是類型還有另一個HttpSessionBindingListener屬性
    用來記錄session被bind以及被解開的狀態
    這個屬性是不需要被設定在DD裡面

  • 和遷移有關的HttpSessionActivationListener
    事件類型:HttpSessionEvent
    用途:
    session 即將被passivated
    session 被activated
    這個屬性也不需要被設定在DD裡面

什麼是session遷移

現在的系統大多使用Load Balancing
HttpSessionActivationListener就是在處理

當一個VM遷移到另一個VM的狀況

儘管在Load Balancing去處理要到哪一台VM
但WEV application每個SessionID仍是唯一的
因此兩次request分別被load Balacning到不同的VM
Container會找到一次的VM的sessionID

透過HttpSessionActivationListener提供的方法:
sessionWillPassivate() & sessionDidActivate()
將前一個session完整個遷移到新的VM(即第二次request所執行的VM)


小結

今天針對session稍做了整理
接下來會來練習一個小範例
再來接著JSP的部分


上一篇
[Day 14] Session 機制 part1
下一篇
[Day 16] session練習
系列文
30 days JSP & Servlet學習紀錄 30

尚未有邦友留言

立即登入留言