详解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
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/kangrui201610411307/p/10633450.html

时间: 2024-11-09 21:35:05

详解Session和cookie的相关文章

详解SESSION与COOKIE的区别

大家都知道,session是存储在服务器端的,cookie是存储在客户端的.但是问到具体的,还真不太好回答.总结如下: 1.cookie是客户端保持状态的方案,他需要用户打开浏览器的cookie支持,而session机制是服务器端与客户端保持状态的一种方案. 2.session是针对与每一个用户而言的,变量的值存储在服务器上,用sessionID来区别是哪个用户变量,这个值是用户的浏览器返回给服务器的,如果客户禁用cookie,可以通过get方式传递给服务器.就安全性而言,明显session更好

详解PHP中cookie和session的区别及cookie和session用法小结

cookie 是通过扩展http协议实现的 cookie 主要包括 :名字,值,过期时间,路径和域:如果cookie不设置生命周期,则以浏览器关闭而关闭,这种cookie一般存储在内存而不是硬盘上.若设置了生命周期则相反,不随浏览器的关闭而消失,这些cookie仍然有效直到超过设定的过 期 时间.session 一种类似散列表的形式保存信息,当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已

Cookie与Session详解

来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制.. 一.Cookie详解 Cookie在远程浏览器端存储数据并以此跟踪和识别用户的机制.从实现上说,Cookie是存储在客户端上的一小段数据,浏览器(即客户端)通过HTTP协议和服务器端进行Cookie交互. Cooke独立于语言存在,严格地说,

JavaEE基础(04):会话跟踪技术,Session和Cookie详解

本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操作结果才能和登录用户做关联. 2.概念简介 可以把会话理解为客户端与服务器之间的一次交互,在一次交互中可能会包含多次请求和响应.在JavaWeb中,从客户端向服务器发出第一个请求开始,会话就开始了,直到客户端关闭浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 二.Cookie用

详解 Cookie 纪要(vue.cookie,jquery.cookie简化)

今天看到一篇cookie的文章,写的特别详细,感谢 晚晴幽草轩 的分享,原文链接http://www.jeffjade.com/2016/10/31/115-summary-of-cookie/ 原文如下,记录到此供以后查阅并希望好文章能被更多需要的人看到   背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性.在JavaScript中可以通过 document.c

PHP CURL参数详解

PHP CURL参数详解 curl用法:cookie及post一.cookie用法 <?php $cookie_jar = tempnam('./tmp','cookie'); // login $c=curl_init('http://login_url?username=... curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c, CURLOPT_COOKIEJAR, $cookie_jar); curl_exec($c); 

【SSH三大框架】Hibernate基础第三篇:实体对象的三种状态以及get、load、persist三个方法的详解

一.Hibernate中实体对象分为三种状态:瞬态.持久.脱管 瞬态(transient):这种状态下的实体对象,数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来的并且与Session没有任何关系的对象. 持久(persistent):数据库中有数据与之对应,当前与Session有关联,并且相关联的Session并没有关闭,事务没有提交.PS:持久对象发生改变的时候,在事务提交的时候会影响到数据库中. 脱管(detached):数据库中有数据与之对应,但当前没有Se

Hibernate系列(三):实体对象的三种状态以及get、load、persist三个方法的详解

一.Hibernate中实体对象分为三种状态:瞬态.持久.脱管 瞬态(transient):这种状态下的实体对象,数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来的并且与Session没有任何关系的对象. 持久(persistent):数据库中有数据与之对应,当前与Session有关联,并且相关联的Session并没有关闭,事务没有提交.PS:持久对象发生改变的时候,在事务提交的时候会影响到数据库中. 脱管(detached):数据库中有数据与之对应,但当前没有Se

cookie 和session 的区别详解 《转》

二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie 里的内容来判断使用者,送出特定的网页内容给你. Cookie 的使用很普遍,许多有提供个人化服务的网站,都是利用 Cookie 来辨认使用者,以方便送出使用者量身定做的内容,像是 Web 接口的免费 email 网站,都要用到 C