在控制器内创建会话cookie

Pie*_*ter 4 spring spring-mvc

我是Tomcat,servlets和Spring Web的新手.我来自PHP背景,所以至少可以说我有点迷失方向.我想让一个控制器为我创建一个会话cookie.

我被告知我可以在标准servlet中获得这样的会话:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
  // Somewhere inside the method...
  HttpSession session = request.getSession(true);

  // Set a cookie
      session.setAttribute("hello", "world");

  // More stuff...
}
Run Code Online (Sandbox Code Playgroud)

这如何转化为Spring Web MVC的做事方式?我可以在控制器内创建会话cookie吗?

Gun*_*ger 6

您在示例中所做的与cookie无关.session.setAttribute("key",valueObject); 在会话中设置java对象.会话保存在服务器上.sessionid是唯一传达回客户端的东西.它可以是cookie,也可以是URL.会话中的属性未序列化为字符串.

另一方面,Cookie是发送回客户端的字符串.客户有责任存储他们的cookie(有些人将其关闭)并将其返回给服务器.

从复杂的对象图设置cookie值将需要序列化和反序列化.会话属性不会.

如果您想阅读c​​ookie,请使用:

@CookieValue("key") String cookie
Run Code Online (Sandbox Code Playgroud)

在控制器参数列表中.cookie变量将使用名为"key"的cookie中的值填充.

要设置cookie,请致电:

response.addCookie(cookie);
Run Code Online (Sandbox Code Playgroud)


Tom*_*icz 4

在 Java Servlet(尤其是 Spring MVC)中,您不直接与会话 cookie 交互,实际上正确编写的基于 servlet 的应用程序应该在不启用 cookie 的情况下工作,自动回退到基于 URL 的会话 id。

您提供的方式是正确的,尽管 Spring 为您提供了更好(更高级别)的方法,例如会话范围的bean。这样您就永远不会与会话本身进行交互。