2

我正在学习 Spring MVC,但无法理解会话数据的存储位置和方式。

我想要实现的是将会话数据存储在发送到浏览器的加密 cookie 中。这是必要的,因为我计划在没有粘性会话的 heroku 上运行应用程序。(这是我已经在 python 中使用的解决方案,通过使用金字塔和烧杯,我对此非常满意)

我有这个玩具控制器

public class HelloController implements Controller {

    protected final Log logger = LogFactory.getLog(getClass());

    public ModelAndView handleRequest(HttpServletRequest request,
                                      HttpServletResponse response)
            throws ServletException, IOException {

        logger.info("Returning hello view");

        Map<String, Object> myModel = new HashMap<String, Object>();
        myModel.put("key", "value");

        return new ModelAndView("hello", "model", myModel);
    }
}

如果我打电话会发生什么

        HttpSession session = request.getSession();

在handleRequest 方法中?我认为如果会话不存在,则会启动会话,否则将返回现有会话。但是这个会话存储在哪里?在带有 cookie 的浏览器中?或者别的地方?

如何指定必须将会话放入 cookie 并设置必须用于加密它的密钥?

4

1 回答 1

0

我认为您不能直接告诉 spring/web 应用程序将会话数据存储到 cookie。

您需要执行以下操作才能满足您的要求

  1. 为要存储的每个数据创建每个 cookie,然后将 cookie 添加到响应

    Cookie c = new Cookie("sessionid", sessionid);
    res.addCookie(c);
    
  2. 并从请求中读取 cookie 数据

    Cookie[] cookies = req.getCookies();
    

在这种情况下,您也可以完全控制加密。

自动化这个过程意味着将会话数据同步到 cookie,您将能够编写方面处理程序。

于 2012-07-24T14:22:06.557 回答