详解Session和cookie
1、cookie
1.1、 为什么会有cookie?
由于HTTP是无状态的,服务端并不记得你之前的状态。这种设计是为了HTTP协议的方便,但是也存在一些问题。比如我们登录一个购物网站,我们需要用户登录后才能进行物品的购买,但是由于HTTP无状态性,在你向服务端发起下一次请求的时候服务端并不会记得你之前登录过,所以服务端会要求客户再次登录;显然这样的用户体验是非常不好的,这个例子在我之前做购物网站的时候也遇见过。于是就引入了cookie来保存你的用户名、密码、浏览的网页等信息。当客户端要发送http请求时,浏览器会先检查下是否有对应的cookie。有的话,则自动地添加在request header中的cookie字段,然后服务端会判断cookie的内容是否正确或者是否过期。注意,每一次的http请求时,如果有cookie,浏览器都会自动带上cookie发送给服务端。
1.2、什么是cookie?
cookie是以小的文本文件形式(即纯文本),保存在本地内存中,完全存在于客户端;用来在服务端和客户端进行信息传递的,cookie保存了用户的登录的凭证,有了它,只需要在下次请求时带着cookie发送,就不必再重新输入用户名、密码等重新登录了。
第一次发起请求:
之后发起请求
1.3、查看cookie
在浏览器的控制台可以通过document.cookie来查看cookie,cookie是键值对构成的字符串,每个键值对是由分号隔开;也可以通过控制台的Application选项在左边查看cookie。
1.3、cookie的属性
每个cookie都有一定的属性,比如什么时候失效,要发送到哪个域名,哪个路径等等。
Expires、Max Age:用来说明cookie什么时候失效
Domain、Path:限制cookie能被哪些URL访问
Size:用来表示cookie的大小
Secure:设置cookie只在安全的请求中才会发送,比如在HTTPS请求中会发送,而在不安全的HTTP中不会发送
httpOnly:用来设置cookie是否能通过 js 去访问,只能通过服务端来设置。
如上图所示在HTTP选项中带勾的表示httpOnly。
1.3、cookie的创建、读取、删除的方法
cookie既可以在服务端设置,也可以在客户端设置
1.3.1、在服务端设置
在服务端可以通过set-cookie来设置cookie,但是每个set-cookie只能存放一个cookie,并且服务端可以设置cookie 的所有选项。
1.3.2、在客户端设置
document.cookie = "name=cc",document.cookie = "sex:male",每次只能设置一个值,如何要设置多个cookie可以重复执行上面的操作。如果要删除cookie只需要把cookie的Expires改为-1表示该cookie已经过期。
1.4、cookie的优缺点
cookie的缺点:
每个特定域名下的cookie数量有限:
IE6或IE6-(IE6以下版本):最多20个cookie
IE7或IE7+(IE7以上版本):最多50个cookie
FF:最多50个cookie
Opera:最多30个cookie
Chrome和safari没有硬性限制
当超过单个域名限制之后,再设置cookie,浏览器就会清除以前设置的cookie。IE和Opera会清理近期最少使用的cookie,FF会随机清理cookie;
存储量太小,只有4KB;
每次HTTP请求都会发送到服务端,影响获取资源的效率;
需要自己封装获取、设置、删除cookie的方法;
2、session
与cookie不同session是保存在服务端
当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
2.1、存取方式
Session中能够存取任何类型的数据,包括而不限于String、Integer、List、Map等。Session中也能够直接保管Java Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做是一个Java容器类。
2.2、创建session
// 1、创建Session对象
HttpSession session = request.getSession();
// 2、创建Session对象
HttpSession session = request.getSession(true);
1
2
3
4
5
2.3、session有效期
session一般在内存中存放,内存空间本身大小就有一定的局限性,因此session需要采用一种过期删除的机制来确保session信息不会一直累积,来防止内存溢出的发生。
session的超时时间可以通过maxInactiveInterval属性来设置。
如果我们想让session失效的话,也可以当通过调用session的invalidate()来完成。
session与cookie区别
cookie是存在客户端浏览器上,session会话存在服务器上。会话对象用来存储特定用户会话所需的属性及配置信息。当用户请求来自应用程序的web页时,如果该用户还没有会话,则服务器将自动创建一个会话对象。当会话过期或被放弃后,服务器将终止该会话。cookie和会话需要配合。当cookie失效、session过期时,就需要重新登录了。
3、localStorage和sessionStorage
在较高版本的浏览器中,js提供了两种存储方式:sessionStorage和globalStorage。在H5中,用localStorage取代了globalStorage。
sessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问,并且当会话结束后,数据也随之销毁。所以sessionStorage仅仅是会话级别的存储,而不是一种持久化的本地存储。
localStorage是持久化的本地存储,除非是通过js删除,或者清除浏览器缓存,否则数据是永远不会过期的。
---------------------
作者:IIIlion
来源:CSDN
原文:https://blog.csdn.net/weixin_43534005/article/details/88826813
版权声明:本文为博主原创文章,转载请附上博文链接!
详解Session和cookie的更多相关文章
- 详解SESSION与COOKIE的区别
在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...
- Django详解之四、cookie和session
一.使用背景 思路 简单的后台管理:对人员的管理 1. 登录注册 2. 老师 班级管理 学院管理 3. 增删改查 开发: 1. 定义数据库表结构 a) 表结构关系 i. class classes(m ...
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...
- SessionState详解 session有效期时间:默认20分
为当前应用程序配置会话状态设置. configuration 元素(常规设置架构) system.web 元素(ASP.NET 设置架构) sessionState 元素(ASP.NET ...
- 详解Session分布式共享(.NET CORE版)
一.前言&回顾 在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的S ...
- 详解session
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp30 一.术语session 在我的经验里,session这个词被滥用的程度 ...
- Cookie与Session详解
来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议 ...
- JavaEE基础(04):会话跟踪技术,Session和Cookie详解
本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...
- session及cookie详解(七)
前言 文章说明 在每整理一个技术点的时候,都要清楚,为什么去记录它.是为了工作上项目的需要?还是为了搭建技术基石,为学习更高深的技术做铺垫? 让每一篇文章都不是泛泛而谈,复制粘贴,都有它对自己技术提升 ...
随机推荐
- Nodejs一键实现微信内打开网页url自动跳转外部浏览器访问的功能
前言 现如今微信对第三方推广链接的审核是越来越严格了,域名在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,要不然就是换个域名再推,周而复始.无论是哪一种情况都会面 ...
- Matcher.replaceFirst(String replacement)
java.util.regex.Matcher.replaceFirst(String replacement)方法是用来进行字符串的替换操作. public String replaceFirst( ...
- sqli注入--利用information_schema配合双查询报错注入
目录 sqli-labs 5.6双查询报错注入通关 0x01 获取目标库名 0x02 获取库中表的数量 0x03 获取库中表名 0x04 获取目标表中的列数 0x05 获取目标表的列名 0x06 从列 ...
- 干掉windows无脑设定:“始终使用选择的程序打开这种文件”、“使用Web服务查找正确的程序”
先看几张图体会一下: 实在很佩服自己就那样默默忍受了很多很多年.其实这些东西在网上小小的一搜,5分钟就能搞定. 然而我们大家都在想,现在没时间,我还要做xxxx事呢,反正多点两下鼠标而已. 是啊,点两 ...
- 【easy】101. Symmetric Tree
判断一棵二叉树是否对称 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left ...
- Uni-app中Class绑定与Style绑定
为了节约性能,我们将Class与Style的表达式通过compiler硬编码到uni-app中 支持语法和转换效果如下: Class支持语法: <view :class="{ acti ...
- 提高github代码下载速度的小技巧
1.打开如下路径: C:\Windows\System32\drivers\etc 2.将此处的HOSTS文件复制到其他地方,比如桌面.(此处大概率是没有编辑权限的) 3.用记事本打开HOSTS文件, ...
- 第一个 Python 程序
## 目标 * 第一个 `HelloPython` 程序* `Python 2.x` 与 `3.x` 版本简介* 执行 `Python` 程序的三种方式 * 解释器 —— `python` / ` ...
- bzoj 5495
今年省选题... 表示当时还没学可持久化trie,所以打60分暴力走人... 现在学了可持久化字典树,就可以搞一搞了嘛! 首先看到题目描述,很容易想到首先搞出异或前缀和,然后建起可持久化字典树 然后考 ...
- 一个二维码-->网址-->iOS/Android跳转
view-source:https://dpx.shopo.com.cn/down.html lmxmn117:~ will.wei$ curl https://dpx.shopo.com.cn/do ...