会话概述及cookies的介绍

一、会话概述

在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。

Web应用中的会话过程类似与生活中的打电话过程,他指的是客户端(浏览器)与服务器之间连续一系列请求和响应的过程,例如:户到某购物网站购买商品,这时用户会和网站之间发生多次的请求响应,整个购物的过程称为会话.

在打电话的过程中,通信双方会有通话内容,同样,在客户端和服务端交互的过程中,也会产生一些数据。

例如,用户甲和用户乙分别登录了购物网站,甲购买了一个小米手机,乙购买了一个iPad,当这两个用户结账时,Web服务器需要对用户甲和用户乙的信息分别保存。

在以前讲的知识中,HttpServletRequest和ServletConext对象都可以对数据进行保存,但是这两个对象都不行,具体原因如下:

(1)客户端请求web服务器时,针对每次的Http请求,Web服务器都会创建一个HttpServletRequest对象,该对象只能保存本次请求所传递的数据。由于购买和结账是两个不同的请求,因此,在发送结账请求时,之前购买请求中的数据将会丢失。

(2)使用ServletContext对象保存数据时,由于同一个web应用(项目)共享同一个ServletContext对象,因此,当用户进行结账请求时,由于无法区分哪个商品是哪个用户购买的,而是将该购物网站的所有用户购买的商品进行结算,这显然是不行的。

为了保存会话过程中产生的数据,在servlet技术中,提供了两个用于保存会话数据的对象分别是cookie和session。

二、Cookie介绍&Cookie案例

2.1.Cookie和Session技术概述

用户打开浏览器开始访问服务器,在一系列的访问过程中,把用户的这些操作称为用户和服务器的之间的对话(客户端和服务器的会话)。

在交互的过程中,用户的一系列操作,肯定会产生一些数据需要保存。这时就需要使用Java提供的Cookie或者Session技术来完成。

cookie的典型应用是:

判断用户是否登陆过网站,以便下次登录时能够直接登录。如果我们删除cookie,则每次登录必须从新填写登录的相关信息。

Cookie技术在实际网站中的工作原理:

Cookie:它是服务器在获取到用户的请求之后,把用户的请求中的重要资源保存在这个对象中,在给用户响应的时候,把这个对象的发给客户端。然后浏览器接收到这个Cookie之后,浏览器会自动的把Cookie中的数据保存到浏览器管理的缓存中,下次用户在访问这个网站的时候,浏览器就会自动携带上次保存的Cookie中的数据到服务器,服务器进而就能获取到以前的信息。

2.2.Cookie的API介绍

2.2.1.创建Cookie

创建一个 cookie,cookie 是 servlet 发送到 Web 浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。

一个 cookie 拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号。一些 Web 浏览器在处理可选属性方面存在 bug,因此有节制地使用这些属性可提高 servlet 的互操作性。

servlet 通过使用HttpServletResponse#addCookie方法将 cookie 发送到浏览器,该方法将字段添加到 HTTP 响应头。

通过Cookie的构造函数,告诉我们在服务器给响应数据的时候,如果要发送一个Cookie对象,这时需要在服务器先创建一个Cookie对象,而这个Cookie中保存的数据由key和value组成。

当浏览器下次再访问服务器的时候,就会携带这个Cookie对象到服务器,服务器就会获取到当前这个Cookie对象,然后需要通过这个key,找出value值。

需要把浏览器cookie发送给浏览器,需要借助response对象完成

response.addCookie(Cookie对象);

初次访问(debug追踪):

在响应中有cookie,在请求头中没有cookie的信息

第二次访问:

2.2.2.获取Cookie


在客户端访问servlet的时候,首先在servlet中先判断当前用户有没有携带cookie数据

如果有,我们就可以获取这个cookie数据;

如果没有,我们就在程序中创建一个cookie给用户写到客户端。

下次用户访问的时候一定会携带Cookie到服务器。

获取请求中的cookie需要使用request对象。

request对象中的getCookies获取到一个cookie数组,因此一个Servlet可以同时发送给客户端多个Cookie对象。

首次浏览器访问:

第二次访问:

2.2.3.Cookie分类

1、

临时会话级别的Cookie

服务器给客户端发送的Cookie,如果没有指定Cookie在客户端的保存时间,这时这个Cookie只会在浏览器运行的期间存在;

当浏览器关闭之后,客户端中的Cookie随着浏览器的关闭就消失了。

2、持久化的Cookie

在服务器给客户端发送Cookie的时候,可以指定Cookie在客户端的存活时间。

注意:这里的时间值不要太大

2.2.4.设置路径(难点)

问题1:访问服务器的每一个路径都携带cookie数据这样合理吗?

问题2:cookie的默认路径是什么? 有什么根据?

如果创建某个cookie属性没有设置path属性,那么该cookie只对当前访问路径所属的目录及其子目录有效。

假设:访问/day11/cookie1,他的目录是/day11,子目录是/day11/xxx/yyy....,均有效 会携带cookie

假设:访问/day11/aaa/bbb/ccc/cookie1,他的目录是/day11/aaa/bbb/ccc,子目录是:/day11/aaa/bbb/ccc/xxx/yyy/....,均会携带cookie

如果想让某个cookie项对站点的所有访问路径都有效,就调用:cookie.setPath("/")/表示http://ip:端口

2.2.5.Cookie的有效域名(了解)


设置当前这个Cookie在哪个域名下有效。一般的浏览器都不支持接受不是当前域名下的Cookie。

如果把cookie的域名设置成其他的域名,而不是当前这个资源的域名,

这个cookie被称为第三方Cookie,几乎所有的浏览器默认不支持第三方Cookie。

注意:不要设置他

2.2.6.删除Cookie

1、将cookie的name(key)保持一致,value设置为"";

cookie = new Cookie("username","")

2、设置存活时间为0,

cookie.setMaxAge(0)

3、路径要发送cookie时保持一致。

cookie.setPath("/");

4、将cookie发送给浏览器。

response.addCookie(cookie)

2.3.cookie案例:显示用户上次访问的时间

当用户访问某些web应用的时候,经常会显示出上次的访问时间。

例如:QQ登录成功后,会显示用户上次的登录时间。

1、向浏览器发送cookie

2、从cookie中获取上次访问的时间

3根据上次访问时间的内容,给浏览器显示对应的内容

首次访问对应的servlet

第N(>1)次访问:

整体代码:









最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,014评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,344评论 0 10
  • 0 “我讨厌旅行,我恨探险家。”列维-斯特劳斯在《忧郁的热带》开头这样写道。 准备好了士力架、压缩饼干、大白兔奶糖...
    杨摩阅读 793评论 2 1
  • 五、学校地址:河西校区:天津市河西区大沽南路1038号滨海校区:天津经济技术开发区第十三大街29号2016级新生安...
    弹壳阅读 463评论 0 0