Cookie 和 Session
时间:2019-09-19
本文章向大家介绍Cookie 和 Session,主要包括Cookie 和 Session使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Cookie
Cookie具有不可跨域名性。
在本地计算机保存一些用户操作的历史信息(包括登录信息),
并在用户再次访问该站点时浏览器通过HTTP协议将本地cookie内容发送给服务器,从而完成验证。
Cookie是有时间限制的,根据生命期不同分成两种:
会话Cookie:
不设置过期时间,一般不保存在硬盘上而是保存在内存里,关闭浏览器窗口,cookie就消失了。
持久Cookie:
设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。
Cookie实际上是一小段的文本信息:
客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把Cookie保存起来。
当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器检查该Cookie,以此来辨认用户状态。
Cookie cookie = new Cookie("username","aaa"); // 新建Cookie
cookie.setMaxAge(10); //设置生命周期,单位为秒(Second)
response.addCookie(cookie); //输出到客户端
HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能:
设置Cookie的secure属性为true。浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie。
cookie.setSecure(true); // 设置安全属性
Cookie有大小限制以及浏览器在存cookie的个数也有限制
Session
在服务器上保存用户操作的历史信息,通过服务器来保持状态。
Cookie在关闭浏览器窗口后就会消失,但是原来服务器的Session还在,只有等到了销毁的时间会自动销毁
服务器一般把Session放在内存里,针对一个web项目,每个用户都会有一个独立的Session(Tomcat中Session的默认失效时间为30分钟):
Session在用户第一次访问服务器的时候自动创建。
需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。
如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session。
HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,需要依赖Cookie:
浏览器第一次访问服务器时,服务器会向浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。
Session依据该Cookie来识别是否为同一用户。
同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session:
因为Cookie仅当前浏览器内有效,并且各浏览器窗口间不共享。
但是由浏览器窗口内的链接、脚本等打开的新窗口除外。
这类子窗口会共享父窗口的Cookie,因此会共享一个Session。
原文地址:https://www.cnblogs.com/loveer/p/11552487.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx配置SSL证书
- java_Object类、日期时间类、System类、包装类
- [周末往期回顾]UNDO_TABLESPACE参数
- WordPress固定链接后404解决方法
- [Oracle故障处理]记一次INST_DRTLD_MISMATCH导致的version count过多的问题
- 查表法实现十进制转化成其他进制
- ArrayList源码分析
- java_String类、StringBuilder类、Arrays类、Math类的使用
- 抽象类与接口
- java_static、final、super、this关键字的使用
- Lambda表达式
- java_字节流、字符流
- HashMap源码分析
- [周末往期回顾]使用cx_Oracle连接Oracle
- java_数组的定义与操作