HTTP中的Session和Cookie浅析

Stella981
• 阅读 735

Cookie:(小饼干)

一小段文本信息,伴随着用户请求和页面在Web服务和浏览器之间传递,Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息。(保存在客户端) 如图所示:

HTTP中的Session和Cookie浅析

Cookie的来由:
由于Http是无状态的请求协议,无法识别请求来自哪一个用户,进而无法跟踪用户的会话,而Cookie这一会话技术的出现,则可用来标识用户请求,弥补HTTP协议无状态的不足。

Cookie的产生:

Cookie真正产生于服务器端。并将在服务器端产生的cookie放置在响应头中的set-Cookie中,以后用户的每次请求都会带上该Cookie(1.在检查域名domain和Path匹配的情况下 2.在Cookie未过期时)。

Cookie的使用说明:

Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。

Cookie的分类:

会话Cookie:临时Cookie,关闭浏览器即被删除。(保存在浏览器内存中)

持久Cookie:存储在硬盘中,关闭浏览器,重启电脑都不会删除该Cookie,直到Cookie的过期时间到了,才会被删除。

Cookie与Session的关联:

cookie中保存了某一用户的Session的jsessionid,通过该jsessionid的值,即可找到该用户在服务器端的session。

Cookie的作用:

1.用户会话状态管理(用户登录状态,购物车)。

2.个性化设置。

3.浏览器行为跟踪。

Cookie的缺陷:

1.Cookie的存储会限制大小

2.Cookie在浏览器中被看到,有的浏览器甚至可以修改,安全性较低,不能用来存储敏感数据或隐私数据。

Cookie的常见重要属性:(在Cookies下面可存放多个Cookie)

Name:一个Cookie的名称。

Value:一个Cookie的值。

domain:表示Cookie所在的域。

Path:表示Cookie所在的目录。

Size:Cookie的大小。

httponly: cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。

secure 字段 设置是否只能通过https来传递此条cookie。(如为true,浏览器只会在HTTPS和SSL等安全协议中传输此类Cookie)。

expires/Max-Age:字段为此cookie超时时间。若设置其值为一个时间,那么当到达此时间后,此cookie失效。不设置的话,默认浏览器关闭,该Cookie失效。 

SameSite: Cookie允许服务器指定在跨站请求时该Cookie是否会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

Session:

服务器端使用的一种记录客户端状态的机制。(不同于Cookie,Session保存在服务器端)

session的产生:

当用户第一次请求session对象时,服务器会产生一个session,并产生一个session的id,用来标识该session,然后将session的id放在set-cookie中发送给浏览器。当用户下次请求时,会将携带该id的cookie发送回来。服务器会将内存中保留的session的id与cookie中的id进行比较,并找到之前存储的session对象。

session的实现方式:

1.依赖于Cookie(即上述方式)

2.URL重写。在URL的后缀中以 jsessionid=xxxx的方式将jsessionid传递给客户端。

3.隐藏的表单域。在Form表单中,设置一个隐藏域,将jsessionid放置其中,并传给服务器端。

session的生命周期:

session默认的生命周期是20分钟,可以通过属性设置为更长或更短。

sesison中的属性(持续补充中):

Timeout:设置经过多少分钟后服务器自动放弃Session信息。默认为20分钟。

session的作用:
1.判断用户有无登录

2.购物车功能

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Easter79 Easter79
3年前
SpringBoot学习:整合shiro自动登录功能(rememberMe记住我功能)
首先在shiro配置类中注入rememberMe管理器!复制代码(https://oscimg.oschina.net/oscnet/675f5689159acfa2c39c91f4df40a00ce0f.gif)/cookie对象;rememberMeCookie()方法是设置Cookie的生成模
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这