`
wozailongyou
  • 浏览: 130352 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Cookie知识整理

阅读更多
Cookie整理

最近在项目中需要用到Cookie来实现从一个域名到另外一个域名的免登。于是需要了解整理一下Cookie的相关知识。
由于HTTP协议是无状态的协议(虽然Socket连接是有状态的,但每次用HTTP协议进行数据传输后就关闭的Socket连接,因此,HTTP协议并不会保存上一次的状态),因此,如果要保存某些HTTP请求过程中所产生的数据,就必须要有一种类似全局变量的机制保证数据在不同的HTTP请求之间共享,所以要用到Cookie来标识用户状态。

一,设置Cookie
Cookies分为[内存Cookie](临时Cookie,在浏览器关闭的时候消失),和[硬盘Cookie](写到客户端的硬盘中)。
每个Cookie有一个超时时间,内存Cookie只写到客户端的内存中,其超时时间为任何负数。如下可以定义一个内存Cookie:
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(-1); 
response.addCookie(cookie);
对于硬盘Cookie,可以对其进行超时时间的设置,以秒为单位,如下定义一个硬盘Cookie:
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(3600); //在此定义了Cookie的有效时间为一个小时。 
response.addCookie(cookie);

永久Cookie在任意新开启的IE窗口都可以生成Cookie。而临时Cookie由于只保存在当前IE窗口,因此,在新开启的IE窗口,是不能生成Cookie字段的,也就是说,新窗口和旧窗口是不能共享临时Cookie的。使用重定向机制弹出的新窗口也无法和旧窗口共享临时Cookie。但在同一个窗口可以。如在一个IE窗口输入http://localhost:8080/test/first.jsp,向内存写入一个临时Cookie后,在同一个IE窗口输入http://localhost:8080/test/second.jsp,浏览器在向服务端发送HTTP请求时,自动将当前浏览器的临时Cookie(也就是first.jsp所创建的Cookie)和永久Cookie作为HTTP请求头的Cookie字段值发送给服务端。但是如果新启一个IE窗口,由于新IE窗口没有这个临时Cookie,因此,second.jsp只发送了保存在硬盘上的永久Cookie。

设置Cookie的时候还有其他参数可以设置
●path,设置哪些目录下的应用可以访问改Cookie。如下设置:
Cookie cookie = new Cookie("key","value");
cookie.setPath("/test/test2"); //在此定义了/test/test下的应用可以访问该Cookie。
response.addCookie(cookie);
path的默认值是"./"为当前路径。
●Domain,设置Cookie生成的域。如下:
Cookie cookie = new Cookie("key","value");
cookie.setDomain(".channel.alisoft.com"); //在此定义了Cookie生成在哪个域下面
response.addCookie(cookie);
这个参数必须以"."开始。

下面说下怎么通过setDomain的方法实现Cookie的跨域访问:
A机所在的域:home.aaa.com,A有应用appInA。
B机所在的域:bbb.com,B有应用appInB.
1)在appInA下面设置cookie的时候,增加cookie.setDomain(".bbb.com");这样在appInB下面就可以取到cookie。
2)输入url访问appInB的时候,必须输入域名才能解析。比如说在A机器输入:http://bbb.com:8080/appInB,可以获取appInB在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/appInB则不可以获得cookie。
3)设置了cookie.setDomain(".bbb.com");,还可以在默认的home.aaa.com下面共享。
4)问题:怎么设置多个域?在多个域下共享。网上找了很久都没有找到真正能用的方法,估计要用其他技术实现了。

二,读取Cookie
读取Cookie可以按照下面的语句进行:
Cookie[] cookies = request.getCookies();
然后用for语句查找你想要的Cookie。
该方法可以读取当前路径以及"直接父路径"的所有Cookie对象,如果没有任何Cookie的话,则返回null

三,删除Cookie
Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0);
设置为0为立即删除该Cookie
cookie.setPath("/test/test2");
删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
response.addCookie(cookie);













分享到:
评论
4 楼 lihuanxi 2011-04-11  
引用

●path,设置哪些目录下的应用可以访问改Cookie。如下设置:
Cookie cookie = new Cookie("key","value");
cookie.setPath("/test/test2"); //在此定义了/test/test下的应用可以访问该Cookie。
response.addCookie(cookie);
path的默认值是"./"为当前路径。


path的默认值是"./"为当前路径?
不明白你的具体指那个当前路径,
个人测试时发现,默认值是 服务器根目录+项目根目录(eg: /Project1);
然后在对应的文件中找到该cookie,就很清楚看到结果path>localhost/STEP/operatCookie
cookie>>
SamName
"sam value"
localhost/STEP/operatCookie
1024
2721153152
30144513
2121303152
30144513
*
3 楼 lihuanxi 2011-04-11  
引用


三,删除Cookie
Cookie cookie = new Cookie("key", null);
cookie.setMaxAge(0);
设置为0为立即删除该Cookie
cookie.setPath("/test/test2");
删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie
response.addCookie(cookie);



cookie.setPath("/test/test2"); -----怎么变成了"删除指定路径上的Cookie"?
应该是设置一个Cookie对象的可以访问的url!
不明白,但是网上都这么说了;
到底"删除指定路径上的Cookie"是怎么写了?
不会要这样做吧(首先写个Servlet,使他的url-pattern为该路径,然后再请求这路径调用该方法);而且不要说是即时的,ie下延迟太大了,要几秒后才可以,查询出被删除的结果;
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
cookie.setMaxAge(0);
resp.addCookie(cookie);
}
会的麻烦解答下!
2 楼 carlos 2010-04-23  
引用
下面说下怎么通过setDomain的方法实现Cookie的跨域访问:
A机所在的域:home.aaa.com,A有应用appInA。
B机所在的域:bbb.com,B有应用appInB.
1)在appInA下面设置cookie的时候,增加cookie.setDomain(".bbb.com");这样在appInB下面就可以取到cookie。
2)输入url访问appInB的时候,必须输入域名才能解析。比如说在A机器输入:http://bbb.com:8080/appInB,可以获取appInB在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/appInB则不可以获得cookie。
3)设置了cookie.setDomain(".bbb.com");,还可以在默认的home.aaa.com下面共享。
4)问题:怎么设置多个域?在多个域下共享。网上找了很久都没有找到真正能用的方法,估计要用其他技术实现了。




我怎么试了 不行呢?

1 楼 zhouzhichu 2009-10-16  
SSO实现方式分两种,一种是域名相同的,比如a.test.com,b.test.com,通过设置两个对应的Cookie Domain 为test.com即可实现;
另一种是完全垮域名的,比如a.aa.com,b.ss.com,则需要实现中间人角色

相关推荐

    JS cookie Java cookie regex 整理结果

    下面将详细阐述这三个知识点及其应用。 首先,JavaScript Cookie是Web浏览器为JavaScript提供的一种机制,用于在用户的本地存储少量的数据。创建一个JS Cookie的基本步骤包括定义名称、值、过期时间和路径等属性,...

    Cookie学习整理

    以下是对Cookie相关知识点的详细说明: 1. **创建Cookie**: - 可以通过`Response.Cookies`集合直接设置Cookie的属性,如`Value`和`Expires`。例如,创建一个名为`userName`的Cookie并设置其值和过期时间: ```...

    数据库系统基本知识点整理.docx

    数据库系统是现代信息技术中不可或缺的一部分,它涉及到数据的组织、存储和管理,为各类应用提供高效、可靠的数据支持。本文将深入探讨数据、数据库、数据库系统和数据库管理系统的概念,以及使用数据库系统带来的...

    web后端知识整理 初学者.zip

    【标题】"web后端知识整理 初学者.zip" 提供了一个针对初学者的Web后端技术学习资源,其中包含了核心概念、框架和技术栈的概述。这个压缩包中包含了一个名为"web后端.gmind"的文件,可以推测这是一个思维导图文件,...

    C#代码整理(字符串操作、加密解密、密码生成、cookie和缓存操作)

    本压缩包中的"C#代码整理"涵盖了多个关键的编程知识点,这些知识点是任何C#开发者都需要掌握的基础技能。 1. **字符串操作**: C#中的字符串是不可变对象,这意味着每次修改字符串都会创建新的字符串实例。常用的...

    CSDNcookie资料全集

    【标题】"CSDNcookie资料全集"涵盖了关于Cookie技术的广泛知识,这是一份在CSDN网站上搜集并整理的资源集合。Cookie是Web应用程序中用于管理用户会话、存储用户偏好等信息的一种关键机制。在这个资料包中,你可能会...

    cookie管理工具IECookiesView V1.73

    "可进行分类查询、cookie导出等功能"表明该工具不仅能够帮助用户查看各个网站的Cookie信息,还可以按照类别进行整理,方便用户查找特定的Cookie。"界面比较友好"则意味着它的用户界面设计得直观易懂,使得非专业用户...

    java后端开发知识点整理

    - **垃圾回收**:GC算法(如标记-清除、复制、标记-整理、分代收集)与调优。 - **类加载机制**:双亲委派模型。 5. **Spring框架** - **依赖注入**:Bean的生命周期管理,@Autowired、@Value注解。 - **AOP**...

    Python爬虫工程师方方面面的知识.txt打包整理.zip

    在这个"Python爬虫工程师方方面面的知识.txt打包整理.zip"压缩包中,我们可以期待获取到一系列关于Python爬虫开发的重要知识点。 首先,Python之所以成为爬虫开发的首选语言,是因为它简洁明了的语法和丰富的库支持...

    aspnet 知识库(来源李天平整理)

    这个名为“aspnet 知识库(来源李天平整理)”的资源可能包含了李天平对ASP.NET技术的深入理解和实践总结,尤其是一些实用的小技巧。 首先,ASP.NET 4.0是.NET Framework 4的一部分,它引入了多项改进和新特性,...

    最新整理电商网络营销基础知识.pptx

    - **Cookie**:存储在用户设备上的小型数据文件,用于记录用户偏好和行为,帮助网站个性化服务。 - **Database(数据库)**:存储用户信息的数据集合,是精准营销的关键。 - **Keyword(关键字)**:搜索引擎优化...

    YII2自动登录Cookie总是失效的解决方法

    针对这一问题,该文章提出了解决方法,以下是详细的知识点整理。 首先,我们需要了解在YII2框架中,Cookie是如何工作的。Cookie是服务器通过HTTP响应发送到用户浏览器的一小段数据,浏览器会将这段数据保存起来。当...

    XXXX最新整理电商网络营销基础知识.pptx

    3. Cookie:这是一种存储在用户设备上的小型数据文件,用于记录用户行为,帮助网站提供个性化服务。 4. Database(数据库):数据库是存储用户信息的宝库,为精准营销提供关键数据支持。 5. Key Word(关键字):...

    查看和整理IE的cookies信息的工具

    标题中的“查看和整理IE的cookies信息的工具”是指一种专门设计用于管理和分析Internet Explorer(简称IE)浏览器中存储的cookies的软件应用。Cookies是网站在用户计算机上存储的小型文本文件,用来记录用户的浏览...

    java+http+操作cookies源码整理

    以下是对这些知识点的详细解释。 首先,理解Cookies的基本概念。Cookies是由服务器端发送到客户端(浏览器)的一小段文本信息,用来存储用户的状态信息,如登录状态、购物车内容等。它们存储在用户的本地硬盘上,当...

    FindBugs规则整理_中文版

    ### FindBugs规则整理知识点详解 #### FindBugs概述 FindBugs是一款开源的静态代码分析工具,主要用于Java应用程序的缺陷检测。通过分析程序的字节码,FindBags能够帮助开发者发现潜在的问题,提高软件的质量和安全...

    大数据面试知识点

    Cookie与SESSION的区别在于,Cookie存储在客户端,而SESSION存储在服务端。 Java常量池和Java static关键字是Java语言中常见的特性,常量池用于存储字面量和符号引用,static关键字用于定义类属性和类方法。 Redis...

    整理好的.NET初级面试题,及.NET的理论知识

    7. **ASP.NET**:对于Web开发,了解ASP.NET的页面生命周期、控件、路由、状态管理(ViewState、Session、Cookie)以及MVC(Model-View-Controller)模式。 8. **ADO.NET**:数据库访问技术,包括DataSet、DataTable...

    Asp.Net知识锦集

    这个"很齐全的Asp.Net知识锦集"显然是一份由资深开发者整理的宝贵资源,涵盖了Asp.Net开发中的多种关键知识点和常见问题解决方案。 1. **Asp.Net基础**:Asp.Net基于.NET Framework,它提供了丰富的服务器控件、...

    FindBugs规则整理_中文版.pdf

    下面是该文件中所涉及的知识点: Security 1. DMI_CONSTANT_DB_PASSWORD: 硬编码的数据库密码。FindBugs发现代码中使用硬编码的数据库密码,这可能会导致安全性问题。解决方法是使用配置文件或环境变量来存储...

Global site tag (gtag.js) - Google Analytics