`

HTTP会话:cookie

 
阅读更多

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
分享到:
评论

相关推荐

    Web应用安全:HTTPCookie的缺点.pptx

    Web 应用中广泛使用 Cookie 来进行会话管理,而如果 Cookie 的使用方法不当就会滋生安全隐患。与 Cookie 相关的安全隐患大致可分为以下两类。 1)Cookie 的用途不当 2)Cookie 的输出方法不当 Cookie的使用不当 Web...

    Session Cookie的HttpOnly和secure属性

    当设置为true时,表示创建的 Cookie 会被以安全的形式向服务器传输,也就是只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,如果是 HTTP 连接则不会传递该信息,所以不会被窃取到Cookie 的具体内容。...

    PHP会话控制:Session与Cookie详解

    • 会话控制的产生背景/概念 • cookie的维护与生命周期(有效时间) • session的维护与生命周期(回收机制) • cookie与session之间的区别与联系 • 问题1:禁用cookie后session为什么会失效? • 问题2:IE浏览器下...

    Web应用安全:HTTPCookie的作用.pptx

    为了实现会话管理,HTTP 引入了名为 Cookie 的机制。Cookie 相当于服务器下达给浏览器的命令,让其记住发送给它的“名称 = 变量”这种格式的值。由于 Cookie 会被用于实现会话管理,因此,下面就让我们结合 PHP 中的...

    会话:koa的简单会话中间件

    需要Node 7.6或更高版本才能支持异步/等待安装$ npm install koa - session注意6.x将默认cookie密钥从koa:sess更改为koa.sess以确保set-cookie值对HTTP规范有效。 。 如果要与以前的版本兼容,可以将config.key手动...

    cookie-session-token:cookie、session、token简介

    cookie-session-tokencookie、session、token简介为了解决HTTP无状态,无法保存用户状态的问题产生了cookie和session1.服务端收到用户账号密码后,完成登录生成一个全局变量的session会话,作为所有鉴权脚本的通行证...

    Http会话管理演示文稿

    Http会话管理演示文稿,包含对Cookie和Session的详解介绍以及使用,能够帮助我们了解会话原理及编程中应用

    正确理解http会话管理

    正确理解http会话管理,session,HTTP协议与状态保持,理解cookie机制,理解session机制...

    Cookie、Session、Token、JWT

    Cookie:Cookie 是服务器在客户端存储的小型数据文件。它通常用于在客户端存储用户的身份验证信息或其他状态数据。当客户端请求服务器时,会将 Cookie 信息附加在 HTTP 请求的头部中发送给服务器。服务器可以读取和...

    python使用cookie库操保存cookie详解

    复制代码 代码如下:Set-Cookie:session=8345234;expires=Sun,15-Nov-2013 15:00:00 GMT;path=/;domain=baidu.com expires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域. 路径”path”...

    akka-http-session:Web和移动客户端akka-http会话,具有可选的JWT支持

    akka-http-session使用cookie或自定义标头+本地存储提供Web和移动应用程序中客户端会话管理的指令,并具有可选的格式支持。 提供了以及代码示例(使用Java,但易于转换为Scala),该示例回答了有关会话如何工作,...

    浅析HTTP协议

    会话与会话状态: Cookie Session Cookie和Session的区别 HTTP协议  HTTP请求: Post /test.php HTTP/1.1 //请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本 Host: www.test.com //请求头...

    guide-sessions:有关如何为应用程序创建,使用和缓存HTTP会话数据的指南:

    出于安全原因,与敏感数据一起使用时,HTTP会话比cookie更为可取。 会话向用户隐藏数据。 精明的用户可以操纵Cookie来向您的网站提出虚假请求。 什么是会话持久性? 高流量的网站必须以快速可靠的方式支持数千个...

    node-cookies:简单的课程,演示如何管理Cookie和会话

    Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure] Set-Cookie值的第一部分通常是形式为name=value的字符串 例如,值可以是: email=joe@example.com 在这种情况下,标头将具有此值。...

    一篇文章搞定iOS的Cookie存取

    Cookie可以分为两类,会话Cookie和持久Cookie,会话Cookie是临时Cookie,当前会话结束(浏览器退出)时Cookie会被删除。持久Cookie会存储在用户的硬盘上,浏览器退出,然后重新启动后Cookie仍然存在。会话Cookie和持久...

    cookie机制

    本文档描述了在http通信过程中,cookie保存会话的机制原理。

    scs:Go的HTTP会话管理

    SCS:Go的HTTP会话管理产品特点通过中间件自动加载和保存会话数据。... 会话数据存储在服务器上,并以会话cookie的形式与客户端进行通信,并随机生成一个唯一的会话令牌(或会话ID )。 package mainimport

    十、会话状态

    10.1 会话状态概述 HTTP协议的“无状态”(Stateless)特点带来了一系列的问题。特别是通过在线商店购物时,服务器不能顺利地记住以前的事务就成了严重的问题。...利用HTTP Cookie来存储有关购物会话的信息,后继的各

    https-cookie-stealer:用于从 https 会话中窃取未受保护的 cookie(缺少安全属性)的 PoC

    例子: [removed][removed] 然后它实现一个基本的 http 服务来检索 cookie 值。 https_cookie_stealer.py 基于 MITMProxy ( ) 库 libmproxy。 运行:https_cookie_stealer.py 无需安装即可从源代码库运行。 只需以...

    六大对象Response,Request,Server,Application,Session,Cookie

    Response对象用语输出数据到客户端,包括向浏览器输出数据、重定向浏览器到另一个URL或向浏览器输出Cookie文件。 Request对象主要是让服务器取得...Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。

Global site tag (gtag.js) - Google Analytics