Cookie是Web服务器保存在用户硬盘上的一段文本,Web服务器将它发送到浏览器。之后,当再次访问同一网络时,浏览器将它原封不动地返回。其中的信息片断以"名/值"对的形式存储。
Cookie用来对客户短期跟踪,记录客户的信息等。
一. Cookie的基本运作机制
Cookie的运作机制是由HTTP协议规定的。
当客户端首次请求访问服务器时,服务器现在客户端存放包含该客户信息的Cookie,以后客户端每次请求访问服务器时,都会在HTTP请求数据中包含Cookie,服务器解析HTTP请求中的Cookie,就能获得客户的相关信息。
二. 使用Cookie
1. 创建Cookie对象(javax.servlet.http.Cookie)
每个Cookie对象都包含一个Cookie名字和Cookie值。即Cookie的构造方法有两个参数:Cookie名称和Cookie值。
Cookie login=new Cookie("CookieName","John");
2. 服务端设置Cookie
设置Cookie的注释
login.setComment("Cookie Coment");
设置Cookie有效时间
创建Cookie并将它发送到浏览器后,默认情况下的Cookie是会话级的,Cookie仅仅存储在浏览器的进程中。用户退出浏览器后,Cookie将被删除。
通过setMaxAge(time)可以设置Cookie的有效期时间。时间以秒为单位。
例:将Cookie的生命设置为一天。
login.setMaxAge(60*60*24);
如果设置的参数time>0,就指示浏览器在客户端硬盘上保存Cookie的时间为time秒。
如果设置的参数time=0,就指示浏览器删除当前Cookie。
如果设置的参数time<0,就指示浏览器不要把Cookie保存在客户端硬盘中。Cookie仅仅存在在当前浏览器进程中,当浏览器进程关闭,Cookie也就消失。
默认cookie的有效期为-1。
3. 发送Cookie到客户端
刚创建的Cookie存在于服务器内存中,必须将它发送到客户端,Cookie才能发挥作用.
发送Cookie,需要使用HttpServletResponse的addCookie方法,将Cookie插入到一个HTTP响应报头.
发送的语句如下:
public void doGet(HttpServletRequest req,HttpServletResponse res){
Cookie login=new Cookie("CookieName","John");
login.setComent("Cookie Coment");
res.addCookie(login);
}
4. 从客户端读取Cookie
读取Cookie对象中的信息:
得到cookie的名称:cookie.getName();
得到cookie的值:cookie.getValue();
得到有效期:cookie.getMaxAge();
得到需要的Cookie对象
调用request.getCookies()得到一个Cookie对象数组。该数组包含了HTTP请求中的所有Cookie。如果在HTTP请求中没有任何Cookie,则request.getCookies()返回null。
例:得到Cookie名字为"username"的Cookie对象,并且打印出Cookie中的值。
Cookie resultCookie=null;
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("username")){
resultCookie=cookies[i];
break;
}
}
}
System.out.println(cookies.getValue());
调用每个Cookie的getName()方法。调用getValue()方法得到相关Cookie的值。
设置Cookie的有效范围
假如App1应用的一个Web组件X在浏览器上保存了一个Cookie,当浏览器端再次请求访问app1,app2,app3应用中的其他Web组件时。在默认情况下。处于安全的原因,只有app1应用中的Web组件能读取该Cookie。
通过cookie.setPath(Strng path),cookie.setDemain(String domain)方法来设置Cookie的path和domain属性。
1. 例:Tomcat服务器A的app1应用生成cookie:
Cookie cookie=new Cookie("CookieName","tom");
cookie.setPath("/");
response.addCookie(cookie);
"/"表示根路径。也即表示,同一个Tomcat服务器中的所有Web应用可以共享cookie。
2. 例:Tomcat服务器A的app1应用生成cookie:
Cookie cookie=new Cookie("CookieName","tom");
cookie.setPath("/app2/");
response.addCookie(cookie);
只有Tomcat服务器A中的app2应用才能访问该cookie。app1也不能访问该cookie。
3. 例:Tomcat服务器A的app1应用生成cookie:
Cookie cookie=new Cookie("CookieName","tom");
cookie.setPath("/app1/sub");
response.addCookie(cookie);
只有Tomcat服务器A中的app1应用中位于"/sub"子路径下的Web组件才能访问该cookie。
4. 例:假定Tomcat服务器B中的所有Web应用访问Cookie,假定Tomcat服务器B域名为"www.cat.com"。Tomcat服务器A的app1应用生成cookie:
Cookie cookie=new Cookie("CookieName","tom");
cookie.setDemain(".cat.tom");
response.addCookie(cookie);
这样Tomcat服务器B也能访问该cookie。
注意setDemain(String domain)的domain必须以"."开头。参数具体格式参考RFC2109文档。
5. 例:假定Tomcat服务器B中的所有Web应用访问Cookie,假定Tomcat服务器B域名为"www.cat.com"。Tomcat服务器A的app1应用生成cookie:
Cookie cookie=new Cookie("CookieName","tom");
cookie.setDemain(".cat.tom");
cookie.setPath("/app3/");
response.addCookie(cookie);
表示仅仅希望Tomcat服务器B中的app3应用能访问该cookie。
- 大小: 34.9 KB
分享到:
相关推荐
- `expiration`:Cookie 过期时间,默认情况下是会话结束时。 - `path`:Cookie 可访问的路径,默认情况下为当前路径。 - `secure`:是否只通过 HTTPS 发送 Cookie,默认为 false。 - **访问 Cookie**:可以通过...
Set-Cookie: name=value; expires=date; path=path; domain=domain; secure; ``` 2. 读取:在HTTP请求头的Cookie字段中包含所有相关Cookie。例如: ``` Cookie: name=value; another_name=another_value; ``` ...
在IT领域,尤其是在Web开发中,Cookie和会话管理是至关重要的概念,它们涉及到用户身份验证、状态跟踪以及用户体验优化等多个方面。以下是对"Cookie会话的操作"这一主题的详细阐述。 Cookie是一种在客户端(用户的...
本实践将探讨如何在分布式环境中实现会话追踪,主要采用Cookie和Redis这两种技术手段。 首先,我们要理解会话(Session)的概念。在Web开发中,会话是一种在用户浏览器与服务器之间维持状态的技术,允许跨多个HTTP...
4. 删除客户端的会话cookie:虽然服务器端的会话已经结束,但浏览器可能仍持有旧的会话ID。为了安全起见,可以在HTTP响应头中设置一个过期的会话cookie,让浏览器自动删除它。 ```php setcookie(session_name(), ...
会话技术的使用主要是为了解决HTTP协议无状态性的限制,即每次HTTP请求都是独立的,服务器无法识别用户的状态。为了使服务器能够跟踪用户的访问状态,引入了会话跟踪技术,包括Cookie和Session。 Cookie是一种...
如果`maxAge`为负数,Cookie只存在于当前浏览器会话中,关闭浏览器或计算机后,Cookie就会消失。 - **setMaxAge()与getMaxAge()** 通过`setMaxAge(int maxAge)`方法设置Cookie的`maxAge`,而`getMaxAge()`方法...
本文将深入探讨Cookie和Session两种主要的会话管理方式,并结合一个名为"ShoppingCar"的示例来阐述它们在实际应用中的工作原理。 **一、Cookie** Cookie是由服务器发送到客户端(浏览器)的一小段信息,然后由...
许多网站依赖Cookie作为用户会话的标识。如果攻击者能够获取并使用用户的Cookie,他们就可以冒充该用户的身份。服务器在处理请求时,若仅基于Cookie来验证用户,无法区分真实的用户和冒充者,因为两者都持有有效的...
跨站实现HTTP会话劫持是一种网络攻击方式,攻击者通过恶意脚本在用户浏览器上执行,窃取用户的会话信息(如Cookie),进而冒充合法用户对目标网站进行操作。本文将详细介绍HTTP会话劫持的概念、原理及其实施方法,并...
4. 基于HTTP Header的会话保持:这种方法是使用HTTP Header来保持会话,服务器根据客户端的HTTP Header信息来识别客户的身份。 5. 基于I-Rules的会话保持:这种方法是使用I-Rules来保持会话,服务器根据客户端的I-...
3. **使用Cookie**:获取到Cookie后,你可以将它们传递给`requests`库的`get`或`post`方法,以便在HTTP请求中携带Cookie。确保先安装`requests`库: ``` pip install requests ``` ```python import requests ...
1. 会话Cookie(Session Cookie):这种Cookie不会被持久化存储在客户端磁盘上,而是在浏览器会话期间临时存储在内存中。当用户关闭浏览器窗口后,会话Cookie即失效,不再保存。 2. 持久Cookie(Persistent Cookie...
在Web应用程序中,HTTPCookie被广泛用于会话管理,但是不恰当的使用方式可能会引入严重的安全风险。本文将深入探讨Cookie的两大安全隐患类别:用途不当和输出方法不当,并提供相关的解决方案。 一、Cookie的用途...
通过以上内容,我们可以清楚地了解到Cookie与Session的基本概念及其区别,同时对于会话Cookie与持久Cookie的不同也有了更深入的理解。在实际应用中,合理选择和使用这两种机制可以帮助开发者更好地管理用户的会话...
6. **读取Cookie**:在服务器端,可以从`HttpRequest`对象的`Cookies`集合中读取Cookie: ```csharp HttpCookie userCookie = Request.Cookies["UserSession"]; if (userCookie != null) { string username = ...
1994年,网景公司(Netscape)的马克·安德森(Marc Andreessen)引入了HTTP Cookie,以解决用户在浏览网页时保持登录状态的问题,这成为现代Web应用程序中会话管理的基础。 ### 使用场景 #### 1. 会话管理 HTTP ...
### Http会话管理知识点概述 #### 一、会话概念及其重要性 - **定义**:在Web开发中,会话通常指的是用户打开浏览器并访问一系列网页直至关闭浏览器的整个过程。 - **目的**:会话管理的主要目标是跟踪用户在不同...
服务器创建会话后,将ID作为一个Cookie发送给浏览器,浏览器在后续的请求中自动附带该Cookie。然而,Cookie的大小有限,通常不超过4KB,且每个域下的Cookie数量也有一定限制,因此不适合存储大量或敏感数据。对于...
当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。...