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);
分享到:
相关推荐
自己整理的关于java和jscookie的实际应用,以及regex的应用,绝对好用。
Cookie学习整理 Cookie学习整理 Cookie学习整理 Cookie学习整理 Cookie学习整理 Cookie学习整理 Cookie学习整理
对cookie的操作进行了整理和封装,功能包括读取、写入cookie,支持cookie域和cookie有效期
HTTP协议、cookie、session超详细笔记整理,一篇就够了
这些事自己整理的一些文档,适合于初学者.这里面涵盖了cookie的写法,如何新建cookie,cookie的用法
在程序化广告投放过程中,不可避免的会谈到cookie,以及cookie...程序化广告在PC端要用好各种外部数据,这些数据之间的CookieMapping率特别重要,所以专题整理了一个小文,简单介绍一“Cookie”及“CookieMapping”。
字符串操作、加密解密、密码生成、字符过滤、文件上传下载、邮件发送、验证码、cookie和缓存操作等方法
自己整理总结Cookie用法,及代码示例
Jquery拖动窗格保存布局Cookie源码 更新记录 2013/3/21 V3.0 增加两个index页面 index.html对应的是1.9.1版本 index1.7.html对应的是1.7.1版本 修正点击 编辑和收缩按钮无反应的bug 2013/3/21 V2.0 更新jquery库...
在php 中cookie是我们常用到的,但是可能很多朋友都不知道cookie是怎么工作的,下面小编来给大家整理一下关于php cookie 工作原理与一些对于cookie读写操作实例。 Cookie和会话状态 做BS开发,这两个概念必不可少,...
我把csdn上的cookie的资料都下来看了一遍,整理好了,大家分享。
一直都是简单去js实现cookie的一些操作,今天把js对cookie操作系统的整理了一遍,包括:js读取cookie,js添加cookie,js删除cookie
session与cookie区别课件,可以下载根据自己的需求改动,节省整理的时间
本示例主要源自自己最近要做的一个项目需要用到,但是百度了下觉得这个和我的相近,但是下载下来后发现各兼容性都不好,于是花了几个小时整理并升级了这个功能示例。主要是使用jquery-1.7.1 和最新的jQuery UI - v...
Cookie技术诞生以来,它就成了广大网络用户和Web开发人员争论的一个焦点。下面这篇文章主要给大家介绍了关于servlet之cookie简介的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
查看和整理IE的cookies信息的工具
在本篇文章里小编给大家整理的是关于php如何更新cookie内容的相关知识点,有需要的朋友们学习下。
本文章记录本人在学习 Cookie 中看书理解到的一些东西,加深记忆和并且整理记录下来,方便之后的复习。 封装函数 在默认的情况下存取Cookie是一件比较麻烦的事情。由于Cookie是通过字符串来存储信息的,所以容易导致...
关于cookie和session估计很多程序员面试的时候都会被问到,这两个概念在写web以及爬虫中都会涉及,并且两者可能很多人直接回答也不好说的特别清楚,所以整理这样一篇文章,也帮助自己加深理解 什么是Cookie 其实简单...
HttpClient 是我最近想研究的东西,以前想过的一些应用没能有很好的实现,发现这个开源项目之后就有点眉目了,令人头痛的cookie问题还是有办法解决滴。在网上整理了一些东西,写得很好,寄放在这里。