2011-07-28 65 views
3

有沒有簡單的方法將會話對象存儲在cookies中,而不是存儲在Struts2中?使用Struts2將會話對象保存在Cookies中

感謝

+1

不是真的。 cookie數據是有限制的,因此您無法在cookie中存儲太多內容。如果你正在討論存儲簡單的數據,比如字符串,數字,布爾值或者其他簡單類型,那麼cookies就可以工作,但是如果你想將一個複雜的對象序列化爲一個cookie,你可能會遇到問題。此外,您需要小心保護自己免受客戶在您不期待的狀態下傳輸對象的影響。 –

回答

2

你可以嘗試設置你需要的cookie值,那麼你可以用一個攔截器或操作讀它,這取決於你所需要的。這裏是我如何在Struts2中設置Cookie。

的setCookie方法方法中,作爲參數傳遞響應,cookie的名稱,cookie值和週期

響應:

HttpServletResponse response = (HttpServletResponse) 
ActionContext.getContext().get(ServletActionContext.HTTP_RESPONSE); 

和週期,是這樣的: 60 * 60 * 24 * 365(一年)

public static void setCookie(HttpServletResponse response, String name, String value, int period) { 

    try { 

     Cookie div = new Cookie(name, value); 
     div.setMaxAge(60 * 60 * 24 * 365); // Make the cookie last a year 
     response.addCookie(div); 

    } catch (Exception e) { 
     Logger.getLogger(StrutsUtils.class.getName()).log(Level.INFO, "message", e); 
    } 
} 

的的getCookie方法中,作爲參數傳遞請求對象和cookie的名稱

請求:

HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST); 


public static String getCookie(HttpServletRequest request, String name) { 

    String value = null; 

    try { 

     for (Cookie c : request.getCookies()) { 
      if (c.getName().equals(name)) { 
       value = c.getValue(); 
      } 
     } 

    } catch (Exception e) { 
     Logger.getLogger(StrutsUtils.class.getName()).log(Level.INFO, "message", e); 
    } 

    return value; 
}