2013-07-18 5 views
1

Я использую cookie, чтобы избежать SID (идентификатор сеанса). Я пытаюсь установить cookie с помощью следующего метода и получить его в моем jsp-файле, как показано на рисунке, но это не сработает. он просто показывает HelloSESSIONID.Как работать с кукисами в Struts 2

Java

public class Users { 

public void setcookie(){ 
     Cookie user = new Cookie("User","Miro"); 
     user.setMaxAge(60*60); 
} 

Jsp

<%@ page language="java"%> 
<% Cookie cookies[] = request.getCookies(); 

      for (int i=0; i<cookies.length; i++) 
     { 

     out.println("Hello"+cookies[i].getName()+ "> "); 
     } 
      %> 
+1

возможно дубликат [Использование печенье с Struts 2 и Struts] (http://stackoverflow.com/questions/3350554/using-cookies-with-struts-2-and-struts) –

ответ

0

Вам нужно определить путь для печенья. Например, чтобы сделать его доступным на всех страницах вашего приложения используют следующие

user.setPath("/"); 
or 
user.setDomain("example.com"); 
2
Cookie user = new Cookie("User","Miro"); 
user.setMaxAge(60*60); 

Вы должны отправить печенье, тоже:

response.addCookie(user); 
+1

Но вы знаете, что пользователь может видеть и обновлять содержимое своих файлов cookie по своему усмотрению? Прекрасно подходит для имен экранов, что не очень хорошо для вещей, связанных с безопасностью. – Thilo

+0

У меня есть два вопроса: как создать объект ответа? знаете ли вы о какой-либо альтернативе для случаев, связанных с безопасностью? –

+0

Вы не создаете объект ответа, контейнер сервлета дает его вам. Обычной альтернативой для данных, относящихся к безопасности, является хранилище сеансов на стороне сервера (что вам почему-то не нравится). – Thilo

2

Вот пример использования печенье с Struts 2.

public class MyAction extends ActionSupport implements ServletResponseAware, ServletRequestAware { 

     public int division; 

     public String execute() { 

     // Load from cookie 
     for(Cookie c : servletRequest.getCookies()) { 
      if (c.getName().equals("cookieDivision")) 
      division=Integer.parseInt(c.getValue()); 
     } 

     // Save to cookie 
     Cookie div = new Cookie("cookieDivision", String.format("%d",division)); 
     div.setMaxAge(60*60*24*365); // Make the cookie last a year 
     servletResponse.addCookie(div); 

     return "success"; 
     } 

     // For access to the raw servlet request/response, eg for cookies 
     protected HttpServletResponse servletResponse; 
     @Override 
     public void setServletResponse(HttpServletResponse servletResponse) { 
     this.servletResponse = servletResponse; 
     } 

     protected HttpServletRequest servletRequest; 
     @Override 
     public void setServletRequest(HttpServletRequest servletRequest) { 
     this.servletRequest = servletRequest; 
     } 
    }