`
sw1982
  • 浏览: 511415 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多

先说一个误区:

1.Cookie的格式有2个不同的版本,第一个版本,我们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎所有的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的。而新版本的Cookie目 前还不被Javax.servlet.http.Cookie包所支持。


以上提到的仅仅针对javax.servlet.http.Cookie,反编译源码可以看到private int version = 0;但是java还有其他的cookie类,是可以支持到version1的。

 

 

”javax.servlet.http.Cookie“,通常我们会使用这个类来处理本地存储的cookie,但是如下firebug抓包可以看到,request中的cookie对象是一整个string,这里就涉及到解析cookie的问题。(tomcat源码中有处理request中cookie[]的方法),

 

 

另外java本身有一个类java.net.HttpCookie,~~~根据官方doc文档显示,java6里面其实已经支持各种规范的cookie格式,但在创建的时候,得注意设置version版本

public final class HttpCookie extends Object
implements Cloneable
HttpCookie 对象表示一个 http cookie,该 cookie 带有服务器和用户代理之间的状态信息。广泛采用 Cookie 来创建有状态 (stateful) 会话。
有 3 种 http cookie 规范:
    Netscape 草案
    RFC 2109 - http://www.ietf.org/rfc/rfc2109.txt
    RFC 2965 - http://www.ietf.org/rfc/rfc2965.txt 
HttpCookie 类可以接受所有这 3 种语法形式。
从以下版本开始:    1.6 

并且这个类的方法parse可以直接用来解析request的cookie对象得到cookie数组,即req.getHeader("cookie")

public static List<HttpCookie> parse(String header)

 

在这个类里面有一个guessCookieVersion方法,也大致说明了几个版本间的主要区别:这里可以看到其实expires属性仅仅是Netscape版本使用而已,并非所有cookie都有这个玩意:)

    /*
     * try to guess the cookie version through set-cookie header string
     */
    private static int guessCookieVersion(String header) {
        int version = 0;
        
        header = header.toLowerCase();
        if (header.indexOf("expires=") != -1) {
            // only netscape cookie using 'expires'
            version = 0;
        } else if (header.indexOf("version=") != -1) {
            // version is mandatory for rfc 2965/2109 cookie
            version = 1;
        } else if (header.indexOf("max-age") != -1) {
            // rfc 2965/2109 use 'max-age'
            version = 1;
        } else if (startsWithIgnoreCase(header, SET_COOKIE2)) {
            // only rfc 2965 cookie starts with 'set-cookie2'
            version = 1;
        }
        
        return version;
    }

 

 

  • 大小: 69.5 KB
分享到:
评论

相关推荐

    java中cookie的使用教程

    在Java编程语言中,Cookie是一种小型文本文件,用于在客户端和服务器之间传递信息,特别是保持用户状态和会话。本文将深入讲解Java中Cookie的使用方法,包括创建、设置、读取和删除Cookie,以及其在Web应用程序中的...

    JAVA中cookie用法

    ### JAVA中Cookie的使用详解 #### 一、Cookie的基本概念 在Web开发中,Cookie是一种在客户端存储数据的方式,主要用于追踪用户状态。当用户访问一个网站时,服务器可以在客户端(通常是浏览器)上创建一个名为...

    关于java应用cookie

    当客户端浏览器再次访问该网站时,会把Cookie信息一起发送到服务器端,这样服务器就可以根据Cookie中的信息进行个性化处理。 #### 二、Cookie的创建与使用 ##### 1. 创建Cookie对象 在Java中,创建Cookie非常简单...

    java中cookie,session,验证码的应用实例!

    在Java Web开发中,Cookie、Session和验证码是三个非常重要的概念,它们对于用户身份验证、会话管理以及防止恶意自动操作起着关键作用。本文将深入探讨这些概念,并通过实例来展示它们在实际项目中的应用。 首先,...

    java 中cookie的详解及简单实例

    - **安全性**:Cookie中不应存储敏感信息,因为它们会在每次HTTP请求中被发送。 - **隐私策略**:用户有权禁用或删除Cookie,开发者应考虑无Cookie情况下的处理方式。 - **同源策略**:Cookie遵循同源策略,只能...

    Java 模拟cookie登陆简单操作示例

    Java 模拟Cookie 登陆简单操作示例 在本文中,我们将介绍 Java 模拟 Cookie 登陆的简单操作,结合实例...本示例可以帮助开发者快速了解 Java 模拟 Cookie 登陆的实现原理和实现方法,为实际开发中提供了有价值的参考。

    深入解析:Java中Cookie与Session的区别及应用场景

    本文将详细探讨Cookie和Session的概念、区别以及在Java Web应用中的应用。 Cookie和Session是Java Web应用中两种重要的状态管理机制,它们各有特点和适用场景。合理选择和使用这两种机制,可以提高Web应用的用户体验...

    java 操作cookie

    在 Java 中建立 Cookie 非常简单,主要通过 HttpServletResponse 对象的 addCookie() 方法来实现。下面是一个简单的示例代码: ```java HttpServletResponse response; Cookie cookie = new Cookie("cookiename", ...

    java cookie 读写,记住密码 自动登录

    - **验证Token**:用户再次访问时,服务器读取Cookie中的Token,与数据库中的信息对比,验证通过则自动登录。 6. **注意事项** - 遵循最佳实践,限制Cookie的有效期,不要让其永久存在。 - 对于敏感信息,除了...

    java中Cookie被禁用后Session追踪问题

    Java 中 Cookie 被禁用后 Session 追踪问题 在 Java Web 开发中,Session 是一个非常重要的概念,它用于存储用户的状态信息。但是,当用户禁用 Cookie 时,Session 的追踪就会出现问题。本文将详细介绍 Java 中 ...

    java对cookie的操作java对cookie的操作

    Java中的Cookie操作是Web开发中常见的一种技术,用于在客户端和服务器之间传递状态信息。Cookie是一种小型文本文件,由服务器发送到用户的浏览器,并由浏览器在后续请求中返回给服务器。以下将详细介绍Java如何进行...

    Cookie与Session机制

    这个Session ID会被存储在一个Cookie中,每当用户发起新请求时,都会带上这个Cookie。服务器根据Session ID来查找对应的Session对象,并从中读取或写入用户的状态信息。 ##### 3. Java中Session的实现 在Java Web...

    JAVA之cookie与session

    ### JAVA之cookie与session #### 一、Cookie与Session的概念 **Cookie** 与 **Session** 是两种在 Web 开发中用于跟踪用户会话的重要技术。它们的主要目标是在客户端和服务端之间保持状态。 - **Cookie** 机制...

    老生常谈java中cookie的使用

    在互联网应用中,HTTP协议是一个无状态的协议,这意味着Web服务器...然而,开发者也需要注意Cookie的安全性,例如不要在Cookie中存储敏感信息,并且应当对所有传输的Cookie数据进行加密处理,以免造成用户隐私泄露。

    javacookie的使用

    1. **安全性**: 由于Cookie数据是存储在客户端的,因此需要注意保护敏感信息,避免将其存储在Cookie中。 2. **大小限制**: 浏览器对单个Cookie的大小有限制,通常不超过4KB。 3. **隐私问题**: 使用Cookie时应考虑...

    java cookie 例子

    本示例将详细介绍如何在Java Servlet中使用Cookie。 首先,我们需要了解Cookie的基本概念。Cookie是由服务器发送到浏览器,并由浏览器存储的一小段文本信息。当浏览器发起新的请求时,它会自动将该域下的所有Cookie...

    discuz与java通过cookie共享登陆

    标题“Discuz与Java通过Cookie共享登录”涉及的是在Web开发中如何实现不同系统间用户登录状态的共享,特别是Discuz论坛系统与基于Java的应用之间的交互。Discuz是一款流行的开源社区论坛软件,而Java是一种广泛使用...

    aaaaaa.zip_cookie_cookie java_java cookie

    标题"aaaaaa.zip_cookie_cookie java_java cookie"以及描述中的内容都提到了Cookie在Java Web应用中的关键作用。 **Cookie的基本概念** 1. **定义**:Cookie是由服务器发送到用户浏览器并保存在本地的一小块数据,...

    JS cookie Java cookie regex 整理结果

    JavaScript(JS)Cookie和Java Cookie是Web开发中用于存储客户端数据的两种常见方式,而正则表达式(Regex)在处理字符串和数据匹配时扮演着重要角色。下面将详细阐述这三个知识点及其应用。 首先,JavaScript ...

Global site tag (gtag.js) - Google Analytics