【问题标题】:How do browsers handle cookies?浏览器如何处理 cookie?
【发布时间】:2011-06-21 22:05:53
【问题描述】:

浏览器如何管理 cookie?我的意思是,它必须创建cookie对象吗?

动机:我想登录一个 cookie 网站。如今,cookies 不仅是名称和值——它们还包含域、到期日期等。

我需要 Java 预期的答案。

【问题讨论】:

  • 不,服务器创建cookie对象,浏览器将其粘贴到它的cookie jar中。

标签: java web-applications cookies browser


【解决方案1】:

每当浏览器收到包含特定 cookie 标头的响应时,它都会创建一个 cookie。

使用 java servlet API,您可以通过以下方式创建 cookie:

Cookie cookie = new Cookie();
cookie.setName(); // setValue, setMaxAge, setPath, etc.
response.addCookie(cookie);

在后续请求中,浏览器将 cookie 发送到服务器。同样,使用 servlet API,您可以通过调用 request.getCookies() 获取当前 cookie

【讨论】:

    【解决方案2】:

    假设您在服务器上工作并在 Servlet 环境(Tomcat、Jetty)中工作,那么您想查看响应中的getCookies 和类似的设置 cookie。

    【讨论】:

      【解决方案3】:

      如果您希望从客户端的角度自动浏览网站,而不是手动完成,我会使用像 JWebUnit 这样的框架,它基于 HtmlUnit,但更高级别和更容易使用。您不必担心 cookie,但如果您需要检查它们,您可以访问它们。

      我知道这并不能直接回答您关于浏览器如何处理 cookie 的问题,但希望对您有所帮助!

      【讨论】:

        【解决方案4】:

        如果您想要使用 java.net 内置 API 构建具有 cookie 状态的迷你浏览器,您可以查看本教程:http://www.hccp.org/java-net-cookie-how-to.html。它展示了 Java 如何连接到 URL、通过响应标头获取 cookie,以及如何在请求中设置 cookie。

        一些示例代码:

            System.out.println("GET: " + url);
        
            // create and open url connection for reading
            URL urlObj = new URL(url);
            URLConnection conn = urlObj.openConnection();
        
            // set existing cookies
            conn.setRequestProperty("Cookie", myGetSavedCookies(url));
        
            // connect
            conn.connect();
        
            // loop through response headers to set new cookies
            myAddSavedCookies(conn.getHeaderFields().get("Set-Cookie"));
        
            // read page
            Scanner sc = new Scanner(conn.getInputStream());
            while (sc.hasNextLine())
                out.write(sc.nextLine());
            sc.close();
        

        【讨论】:

        • 我按照教程进行了尝试,但它不起作用。但是我对 requestproperty 的第一个参数只是“Cookie”感到困惑。他们想用这个字符串说什么。它只是一个字符串还是cookie名称或什么????
        • 是一个常量key,表示第二个参数是什么。您可以通过用“;”分隔键=值对来指定多个 cookie。有关此方法的参考,请参阅URLConnection。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 2013-12-21
        • 2020-03-20
        • 2016-06-26
        • 1970-01-01
        • 2017-09-05
        相关资源
        最近更新 更多