【问题标题】:How to work with cookies in Struts 2如何在 Struts 2 中使用 cookie
【发布时间】:2013-07-18 14:51:40
【问题描述】:

我正在使用 cookie 来避免 havind SID(会话 ID)。我尝试使用以下方法设置cookie并在我的jsp文件中检索它,如图所示,但它不起作用。它只显示 HelloSESSIONID。

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()+ "> ");
       }
            %>

【问题讨论】:

标签: jsp jakarta-ee cookies struts2


【解决方案1】:
Cookie user = new Cookie("User","Miro");
user.setMaxAge(60*60);

您也必须发送 cookie:

response.addCookie(user);

【讨论】:

  • 但是你知道用户可以随意查看和更新​​他的cookies的内容吗?适合屏幕名称,但不太适合与安全相关的事情。
  • 我有两个问题首先是如何创建响应对象?你知道安全相关案例的任何替代方案吗?
  • 您不会“创建”响应对象,servlet 容器会将其提供给您。安全相关数据的常用替代方法是服务器端会话存储(出于某种原因,您似乎不喜欢它)。
  • @MirMoorido 在您的 doGet 和您的 servlet 的 doPost 方法中有一个 HttpServletResponse response 参数。
  • @MirMoorido 然后为您的问题使用正确的标签并提供您正在使用的真实代码,我们不能只猜测您的确切问题。
【解决方案2】:

这是一个在 Struts 2 中使用 cookie 的示例。

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;
      }
    }

【讨论】:

    【解决方案3】:

    您需要为 cookie 定义路径。 例如,要使其在应用程序的所有页面中都可以访问,请使用以下

     user.setPath("/");
     or
     user.setDomain("example.com");
    

    【讨论】:

      猜你喜欢
      • 2011-03-22
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多