`
中国爪哇程序员
  • 浏览: 167928 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Cookie 浅谈

    博客分类:
  • java
 
阅读更多
随记Cookie

先看源码

/**
 *
 * Creates a cookie, a small amount of information sent by a servlet to 
 * a Web browser, saved by the browser, and later sent back to the server.
 * A cookie's value can uniquely 
 * identify a client, so cookies are commonly used for session management.
 * 
 * <p>A cookie has a name, a single value, and optional attributes
 * such as a comment, path and domain qualifiers, a maximum age, and a
 * version number. Some Web browsers have bugs in how they handle the 
 * optional attributes, so use them sparingly to improve the interoperability 
 * of your servlets.
 *
 * <p>The servlet sends cookies to the browser by using the
 * {@link HttpServletResponse#addCookie} method, which adds
 * fields to HTTP response headers to send cookies to the 
 * browser, one at a time. The browser is expected to 
 * support 20 cookies for each Web server, 300 cookies total, and
 * may limit cookie size to 4 KB each.
 * 
 * <p>The browser returns cookies to the servlet by adding 
 * fields to HTTP request headers. Cookies can be retrieved
 * from a request by using the {@link HttpServletRequest#getCookies} method.
 * Several cookies might have the same name but different path attributes.
 * 
 * <p>Cookies affect the caching of the Web pages that use them. 
 * HTTP 1.0 does not cache pages that use cookies created with
 * this class. This class does not support the cache control
 * defined with HTTP 1.1.
 *
 * <p>This class supports both the Version 0 (by Netscape) and Version 1 
 * (by RFC 2109) cookie specifications. By default, cookies are
 * created using Version 0 to ensure the best interoperability.
 *
 *
 * @author	Various
 */

// XXX would implement java.io.Serializable too, but can't do that
// so long as sun.servlet.* must run on older JDK 1.02 JVMs which
// don't include that support.

public class Cookie implements Cloneable {

    private static final String LSTRING_FILE =
	"javax.servlet.http.LocalStrings";
    private static ResourceBundle lStrings =
	ResourceBundle.getBundle(LSTRING_FILE);
    
    //
    // The value of the cookie itself.
    //
    
    private String name;	// NAME= ... "$Name" style is reserved
    private String value;	// value of NAME

    //
    // Attributes encoded in the header's cookie fields.
    //
    
    private String comment;	// ;Comment=VALUE ... describes cookie's use
				// ;Discard ... implied by maxAge < 0
    private String domain;	// ;Domain=VALUE ... domain that sees cookie
    private int maxAge = -1;	// ;Max-Age=VALUE ... cookies auto-expire
    private String path;	// ;Path=VALUE ... URLs that see the cookie
    private boolean secure;	// ;Secure ... e.g. use SSL
    private int version = 0;	// ;Version=1 ... means RFC 2109++ style
    
    


第一 与Session的比较
十年前还单机处理业务,集群还不多的时候,Session用的还比较多,现在随便个服务都集群部署,考虑到多节点内存同步,都不太使用session。http是无状态的,保留用户信息用,采用session会话。网上资料太多,不再赘述。

第二 API
太简单,不再赘述

第二 属性信息
属性:name value
有人把cookie理解成map,name 相当key, value 相当 map里的value.
但本身Cookie是个数组。是个Cookie[]
所以这个key是可以重复的。但又经常把cookie当成map使用,所以建议把cookie操作封装下。

属性 comment
就是存储key value 的描述。没什么特别的。

属性 maxAge
cookie的生命周期,默认-1,即关闭浏览器,cookie失效。
单位是??,大于零,即使cookie关闭,cookie依然生效。

属性 version
int ASSIC 数值,准照RFC 标准。
RFC文件是纯ASCII文字档格式
RFC https://zh.wikipedia.org/wiki/RFC#RFC.E6.96.87.E4.BB.B6.E7.9A.84.E6.9E.B6.E6.A7.8B

属性 path
不瞎逼逼了,附上源码描述把
  
  * Specifies a path for the cookie
     * to which the client should return the cookie.
     *
     * <p>The cookie is visible to all the pages in the directory
     * you specify, and all the pages in that directory's subdirectories. 
     * A cookie's path must include the servlet that set the cookie,
     * for example, <i>/catalog</i>, which makes the cookie
     * visible to all directories on the server under <i>/catalog</i>.
     *
     * <p>Consult RFC 2109 (available on the Internet) for more
     * information on setting path names for cookies.


最后讲的属性 domain
参考文档:http://blog.csdn.net/alexxu1988/article/details/47805205

     * Specifies the domain within which this cookie should be presented.
     *
     * <p>The form of the domain name is specified by RFC 2109. A domain
     * name begins with a dot (<code>.foo.com</code>) and means that
     * the cookie is visible to servers in a specified Domain Name System
     * (DNS) zone (for example, <code>www.foo.com</code>, but not 
     * <code>a.b.foo.com</code>). By default, cookies are only returned
     * to the server that sent them.


domain的知识点比较多。

最后一点
cookie 是不安全的
cookie是可以篡改,模拟的。因为是在客户端,之前我本地模拟了A站点的cookie, 用这个cookie是可以直接供真正的A站点使用的。那为什么还要用cookie.方便呀。
建议cookie存放的信息不是敏感信息,像密码这类东西就不要考虑放到cookie.存放的token 后台也要加个校验。cookie攻击的技术门槛是很低的。

分享到:
评论

相关推荐

    JavaScript基础篇——浅谈cookie

    ### JavaScript基础篇——浅谈cookie #### 一、引言 在Web开发中,如何保持用户的登录状态或记住用户的一些个性化设置是一个常见的需求。对于这种轻量级的数据存储需求,`cookie`是一种非常实用的技术。它能够帮助...

    在PHP中浅谈Cookie与Session.pdf

    "浅谈Cookie与Session在PHP中的应用" Cookie是浏览器保存的一种小型文本文件,用于存储用户信息,以便在用户访问网站时,服务器可以识别用户身份。Cookie可以分为两种类型:会话Cookie和持久Cookie。会话Cookie是指...

    浅谈COOKIE和SESSION区别

    一、cookie介绍 cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。 1、设置Cookie PHP用...

    浅谈Cookie的生命周期问题

    Cookie是Web应用程序中常用的一种数据存储机制,它用于在客户端保持状态信息。本文将深入探讨Cookie的生命周期问题,包括如何设置Cookie的有效时间以及不同生命周期的影响。 Cookie的生命周期是由setMaxAge()方法来...

    浅谈cookie和session(小结)

    浅谈cookie和session cookie和session是Java Web开发中两个非常重要的概念,本篇文章将对它们进行探究和总结。 Cookie Cookie是浏览器层面的东西,存在于浏览器的请求头中,以键值对(数组)的形式存在。只要有...

    浅谈CSRF攻击方式

    ### 浅谈CSRF攻击方式 #### 一、CSRF是什么? CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种常见的网络攻击手段,它利用用户在浏览器中保存的有效凭证(如Cookie等),通过伪装成受害者的身份对目标...

    浅谈PHP Cookie处理函数

    1.创建cookie:setcookie()函数第一个参数是必需的cookie名称,第二个参数是cookie的值,第三个参数是cookie的过期时间,第四个参数是cookie的有效路径,第五个参数是cookie的有效域名,第六个参数是一个布尔值,...

    浅谈golang的http cookie用法

    在服务端程序开发的过程中,cookie经常被用于验证用户登录。golang 的 net/http 包中自带 http cookie的定义,下面就来讲一下cookie的一般用法以及需要注意的问题。 http cookie的定义 先来看下golang对cookie结构体...

    padding oracle攻击浅谈

    ### Padding Oracle攻击浅谈 #### 一、引言 随着互联网技术的发展,网络安全问题日益凸显。其中,Padding Oracle攻击作为一种常见的安全威胁,引起了广泛关注。2022年9月17日,微软发布了一则安全漏洞公告,指出其...

    浅谈cookie 和session 的区别

    Cookie和Session是两种常见的用户状态管理机制,它们在Web开发中起着至关重要的作用,用于跟踪用户的会话和存储用户数据。下面我们将深入探讨它们的区别、工作原理以及优缺点。 首先,Cookie是由服务器发送到用户...

    浅谈http协议和REST

    ### 浅谈HTTP协议与REST架构 #### HTTP协议概述 HTTP(Hypertext Transfer Protocol)是一种应用层协议,主要用于从Web服务器传输超文本文档至本地浏览器的传送协议。它采用客户端/服务器模式,通过TCP/IP进行通信...

    浅谈cookie和localStorage那些事

    在Web开发中,数据存储是不可或缺的一部分,而Cookie和localStorage是两种常见的客户端存储方式。本文将深入探讨它们之间的区别以及如何使用。 首先,Cookie是由Web服务器发送到用户的浏览器并存储在本地的一小段...

    浅谈WebView.doc

    - **Cookie管理**:使用`CookieManager`和`CookieSyncManager`进行cookie操作。 - **安全处理**:对于HTTPS网页,需要确保SSL证书正确配置,防止中间人攻击。 8. **内存管理和性能优化** - 使用`WebView.clear...

    浅谈ASP 3.0高级编程(一).doc

    ### 浅谈ASP 3.0高级编程(一) #### 引言 本文旨在探讨ASP 3.0中关于请求和响应对象的高级编程技术。ASP(Active Server Pages)是一种服务器端脚本环境,用于创建动态网页。在ASP 3.0版本中,开发者可以利用...

    浅谈Web应用的网络安全.pdf

    浅谈Web应用的网络安全.pdf 本文对Web应用的网络安全进行了详细的讨论,从Web技术的发展、管理到安全方面都进行了阐述。文章首先介绍了Web技术在商业活动上的使用和普及,然后提到了Web应用系统的漏洞问题,接着...

    【ASP.NET编程知识】浅谈谁都能看懂的单点登录(SSO)实现方式(附源码).docx

    【ASP.NET编程知识】浅谈谁都能看懂的单点登录(SSO)实现方式 单点登录(SSO)是一种允许用户在一个应用系统中登录后,无需再次认证即可访问其他相互信任的应用系统的机制。这提高了用户体验,简化了身份验证过程...

Global site tag (gtag.js) - Google Analytics