Spring MVC究竟如何处理cookie?

时间:2015-12-05 17:39:51

标签: spring spring-mvc cookies

我正在研究Spring如何处理教程中的cookie,我有些疑惑。

在此示例中,有 CookieControllerExample 执行时执行一些Cookie操作。

@Controller
public class CookieControllerExample {

    @RequestMapping(value = "/readcookie", method=RequestMethod.GET)
    public ModelAndView readCookie(@CookieValue(value = "URL") String URL, HttpServletRequest request,
        HttpServletResponse response) {     
        System.out.println("CookieControllerExample readcookie is called");
        return new ModelAndView("/cookie/cookieView", "cookieValue", URL);

    }
    @RequestMapping(value = "/writecookie", method=RequestMethod.GET)
    public String writeCookie(HttpServletRequest request,
        HttpServletResponse response) {     

        System.out.println("CookieControllerExample writeCookie is called");
        Cookie cookie = new Cookie("URL", request.getRequestURL().toString());
        response.addCookie(cookie);
        return "/cookie/cookieView";

    }


    @RequestMapping(value = "/readAllCookies", method=RequestMethod.GET)
    public ModelAndView readAllCookies(HttpServletRequest request) {        
        System.out.println("CookieControllerExample readAllCookies is called");

        Cookie[] cookies = request.getCookies();
        System.out.println("All Cookies in your browsers");
        String cookiesStr = "";
        for(Cookie cookie : cookies){
            System.out.println(cookie.getName() + " : " + cookie.getValue());
            cookiesStr += cookie.getName() + " : " + cookie.getValue() + "<br/>";
        }


        return new ModelAndView("/cookie/cookieView", "cookieValue", cookiesStr);

    }

}

根据我的理解,第一种方法( readcookie())读取存储在我计算机内的名为 URL 的coockie的内容。

第二种方法( writecookie())创建名为网址的Cookie并将其存储在我的计算机上。

第三种方法是读取我计算机上存储的所有cookie的内容。

我有两个疑问:

1)我知道cookies是文本文件。究竟存放在哪里?

2)为什么** writeCookie()方法在创建新cookie后将其添加到响应中?如何检查存储在我系统中的cookie?

response.addCookie(cookie);

我认为这可能取决于响应返回到用户浏览器并从此响应中检索cookie并在我的系统上的某处创建文本文件。是真的还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

你问:

  

1)我知道cookies是文本文件。究竟存放在哪里?

Cookie由客户端浏览器存储在客户端计算机的某个位置。 - 具体位置取决于浏览器

  

2)为什么** writeCookie()方法在创建新cookie后将其添加到响应中?如何检查存储在我系统中的cookie?

正如我在回答问题1时所说的那样,cookie存储在客户端。因此,需要将其值发送到客户端(在http响应的标头中)。这就是将cookie(对象)添加到http响应的原因。

我强烈建议您阅读有关Http Cookies的维基百科文章。并且不要混淆cookie和会话(会话通常使用会话跟踪cookie实现,但其数据在服务器端抵制。)