1.状态管理----Cookie

1.1 为什么需要状态管理

HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了。
如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系。
对于那些需要多次提交数据才能完成的Web操作,比如登录来说,就成问题了。

1.1.1 什么是状态管理(会话管理)

指的是一个客户端的浏览器到WEB服务器之间连续发生的一系列请求和响应的过程。

(相当于打电话)从打开浏览器访问某个网站到关闭该网站的过程我们称为一次会话。

1.1.2状态管理的两种常见的模式;

客户端状态管理技术:将状态存放在客户端。代表性的是Cookie技术(浏览器)

服务器状态管理技术:将状态存放在服务器中。代表的是Session.

1.2.Cookie应用

1.2.1什么是Cookie

Cookie的创建是由服务器创建,服务端调用相关的方法将Cookie响应给客户端

一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(name)和设置值(value)。

说明:Cookie 是由键值对方式存储数据  name:jack

一个WEB站可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点

提供的Cookie。

1.2.2Cookie的使用

步骤:

1.创建Cookie

Cookie cookie=new Cookie(“name”,“jack");//键值对

2.设置Cookie的路径

cookie.setPath("/")

3.设置Cookie的生存时间

cookie.setMaxAge(-1)//关闭浏览器结束

4.把Cookie响应到浏览器

response.addCookie(cookie);

1.2.3如何查询Cookie

//获取客户端的Cookie 存储多个,要用数组

Cookie [] cookies=request.getCookies();

ifcookies!=null)

{

for(Cookie cookie : cookies){

if(cookie.getName().equals(name))

{

String value=cookie.getValue();

System.out.println(value);

}

}

}

1.2.4如何修改Cookie

只要保证Cookie名和路径一致就行

//先得到指定的Cookie

1.2.5如何删除Cookie

1.3 Cookie的生存周期

cookies.setMaxAge(-1);//设置生成时间

括号的取值:

>0有效期,单位是秒

=0失效,用于删除Cookie

<0 内存存储,关闭浏览器失效

1.4 Cookie的编码与解码(8.0版本及之前的版本存储中文需要编码与解码)

中文和英文字符不同,中文属于Unicode字符,在内存中占用4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会出现乱码。编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法,解码使用java.net.URLDecoder类的decode(String str,String encoding)方法

代码:

运行结果:

1.5 Cookie的路径问题

1.5.1什么是Cookie的路径问题

1.5.2 发送Cookie的条件

浏览器在发送请求之前,首先会根据请求url中的域名在cookie列表中找所有与当前域名一样的cookie,然后再根据指定的路径进行匹配,如果当前请求在域匹配的基础上还与路径匹配那么就会将所有匹配的cookie发送给服务器,这里要注意的是最大匹配和最小匹配问题,有些cookie服务器在发送之前会有意扩大当前页面cookie的匹配范围,此时这些被扩大范围的cookie也会一起发送给服务器。
例如:cookie  存在于: http://localhost:8080/day13_cookie_01/
 如果:发送的请求是:http://localhost:8080/day14/aServlet 的话,则不发送cookie到服务端
                                       http://localhost:8080/day13_cookie_01/aServlet能发送cookie到服务器

1.6 Cookie的特点

优点:

1.可配置到期规则 Cookie 可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则。
2.不需要任何服务器资源 Cookie 存储在客户端并在发送后由服务器读取。
3.简单性 Cookie 是一种基于文本的轻量结构,包含简单的键值对。
4.数据持久性 虽然客户端计算机上 Cookie 的持续时间取决于客户端上的 Cookie 过期处理和用户干预,

Cookie 通常是客户端上持续时间最长的数据保留形式
5.cookie.setMaxAge(时间);//单位秒

缺点:

1.大小受到限制 大多数浏览器对 Cookie 的大小有 4096 字节的限制,尽管在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见。

2.安全性低,存在于客户端

3.加密和解密需要额外的编码,另外解码和解密耗费一定的时间而影响应用程序的性能

2. 状态管理---Session

2.1 Session概述

2.1.1什么是Session

Session用于跟踪客户的状态。
Session指的是在一段时间内,单个客户与Web服务器的一连串相关的交互过程。
在一个Session中,客户可能会多次请求访问同一个网页,也有可能请求访问各种不同的服务器资源。

2.1.2 Session 工作原理

http:无状态 无连接
session被用于表示一个持续的连接状态,在网站访问中一般指代客户端浏览器的进程从开启到结束的过程。session其实就是网站分析的访问(visits)度量,表示一个访问的过程。
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。
实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。
这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现

2.1.3 如何获得Session

2.1.4 如何使用session绑定对象

使用HttpSession的setAttribute(属性名,object)方法

2.1.5 如何删除Session

使用HttpSession的invalidate方法

2.2 Session超时

2.2.1什么是Session超时

HttpSession的最后一程访问时间和当前时间的差距大于了 指定的最大空闲时间,这时服务器

就会销毁Session对象。默认的空闲时间为30分钟。

2.2.2如何修改Session的缺省时间限制

使用HttpSession的setMaxAge设置,单位为秒

2.2.3 Session 失效的几种情况

1.超过了设置的超时时间

2.主动调用了invalidate方法

3.服务器主动或异常关闭

注意:浏览器关闭并不会让Session失效

Session和Cookie的区别

1,session存放在服务器端,cookie存放在客户端。

2,session会随着会话的结束而关闭,cookie则存放在客户端浏览器上长期有效。

3,session保存的是对象,cookie保存的是字符串

4,存放在cookie里的信息容易泄露,通常只保存不重要的信息,重要的信息放在session中

会话(cookie的使用,路径和Session的工作原理,使用)的更多相关文章

  1. session的工作原理

    asp中Session的工作原理:asp的Session是具有进程依赖性的.ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序.所以当inetinfo.exe进程崩溃 ...

  2. Cookie和Session的工作原理及比较

    一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...

  3. session的工作原理、django的超时时间设置及session过期判断

    1.session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 session服务端中存在的数据为: session = { 随机字符串1:{ 用户1的相关信 ...

  4. session 的工作原理

    session.cookie_domain session.cookie_path session.name session.save_path session.use_cokies session_ ...

  5. session的工作原理与session用法

    一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理. 这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变. 1 ...

  6. session 的工作原理以及使用细节和url编码

    /**********************************************模拟页面************************************************* ...

  7. Session会话 Cookie JSTL标签

    Cookie  1) HTTP是无状态协议(连接结束后就自动断开),服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我 ...

  8. ???Struts2框架03 session的使用、登录逻辑【session工作原理】

    1 登录逻辑 1.1 获取登录数据(例如:用户名.密码) 1.2 在控制层调用业务层来验证数据信息 1.3 登录成功:保存用户信息(服务器用session.浏览器用cookie),跳转到主页面 1.4 ...

  9. cookie和会话状态的工作原理

    一:存在两种类型的cookie: 1>会话cookie (session cookie)        不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,   ...

随机推荐

  1. Luogu_1080_国王游戏

    题目描述 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这n位大臣排成一排,国王站在队伍的最前面.排好队 ...

  2. [转]<版本一>写代码的小女孩

    天冷极了,下着雪,又快黑了.这是NOIP的前夜.在这又冷又黑的晚上,一个衣衫破烂的小女孩在机房敲着代码.她从班里逃出来的时候还拿着一本算导,但是有什么用呢?那是一本很破旧的书——那么大,一向是她妈妈垫 ...

  3. python编程基础——集合

    集合是是基本数据类型的一种集合类型. 作用:去重 属性:intersection.union.difference.issubset 实例: list_1=[1,2,3,4,3,5,2,6,1]lis ...

  4. Catalan母函数法解表达式

  5. 2019-04-18-NFV基础概念

    NFV技术的起源和概念 在移动互联网时代,运营商面临内外困局.就自身而言,采用的流量增长-网络扩容-收入增长的商业模型正在失效,庞大.僵化的电信基础网络,不能够满足用户的丰富需求:就竞争对手而言,互联 ...

  6. javaScript系列 [28]

    本文介绍JavaScript事件相关的知识点,主要包括事件流.事件处理程序.事件对象(event)以及常见事件类型和事件委托等相关内容. 在网页开发涉及的三种基础技术(HTML CSS JavaScr ...

  7. BFC 浅谈

    写在前面 Block formatting context (块级格式化上下文) 页面文档由块block构成 每个block在页面上占据自己的位置使用新的元素构建BFC overflow:hidden ...

  8. LISTAGG函数

    官网进入 该函数作用是可以实现对列值得拼接: 根据官网介绍,可以对列值排序进行拼接,也可以分组拼接 1.1运行结果 1.2运行结果 2运行结果 注意该函数提供的 over( partition by ...

  9. 【Java】macOS下编译JDK8

    安装mercurial brew install mercurial 下载源码 1234 hg clone http://hg.openjdk.java.net/jdk8/jdk8 java-sour ...

  10. install jekyll

    最直接的方法就是运行快速指南中的命令: gem install jekyll 这个时候会提示: Command 'gem' not found, but can be installed with: ...