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. Python---1基础介绍

    因公司有自动化测试需求,开始自学python,跟着廖雪峰老师的教程,一边学习,一遍记笔记,将学习过程中,遇到的大大小小奇奇怪怪的问题,记录与此. 一.安装 Python是跨平台的,它可以运行在Wind ...

  2. ActiveMQ学习总结(一)

    自己写的网上商城项目中使用了ActiveMQ,虽然相比于RabbitMQ,kafka,RocketMQ等相比,ActiveMQ可能性能方面不是最好的选择,不过消息队列其实原理区别不大,这里对学过的关于 ...

  3. JavaScript 設計模型 - Iterator

    Iterator Pattern是一個很重要也很簡單的Pattern:迭代器!我們可以提供一個統一入口的迭代器,Client只需要知道有哪些方法,或是有哪些Concrete Iterator,並不需要 ...

  4. sycCMS PHP V1.0---呵呵呵呵呵

    闲的无聊,随便找了份代码看了看. //search.php 第17行 第49行 ...... $keyword=SafeRequest("keyword","post&q ...

  5. C++扬帆远航——14(求两个数的最大公约数)

    /* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:gongyueshu.cpp * 作者:常轩 * 微信公众号:W ...

  6. tp5.1 请求时间格式化

    当前时间:{$Request.time|date='Y-m-d H:i:s'} 注意database.php的配置!记录一下!

  7. Metaploit-永恒之蓝漏洞利用

    目录 Metaploit介绍 实验环境 漏洞利用过程 Metaploit介绍 本次测试主要是利用永恒之蓝漏洞对windows7进行控制利用,掌握Metaploit工具的使用,知道永恒之蓝的漏洞利用原理 ...

  8. LeetCode--链表3-经典问题

    LeetCode--链表3-经典问题 题1 反转链表 第一次代码超出时间限制 原因是,反转之后链表的尾部节点和头结点连上了 /** * Definition for singly-linked lis ...

  9. 蚂蚁金服开源 | 可视化图形语法G2 3.3 琢磨

    G2 是蚂蚁金服数据可视化解决方案 AntV 的一个子产品,是一套数据驱动的.高交互的可视化图形语法. 经过两个多月密锣紧鼓的开发,400+次提交,G2 3.3版本今天终于和大家见面了.自上次3.2版 ...

  10. CSS-水平居中、垂直居中、水平垂直居中

    1.水平居中 水平居中可分为行内元素水平居中和块级元素水平居中 1.1 行内元素水平居中 这里行内元素是指文本text.图像img.按钮超链接等,只需给父元素设置text-align:center即可 ...