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的更多相关文章

  1. 详解SESSION与COOKIE的区别

    在PHP面试中 经常碰到请阐述session与cookie的区别与联系,以及如何修改两者的有效时间. 大家都知道,session是存储在服务器端的,cookie是存储在客户端的,session依赖于c ...

  2. Django详解之四、cookie和session

    一.使用背景 思路 简单的后台管理:对人员的管理 1. 登录注册 2. 老师 班级管理 学院管理 3. 增删改查 开发: 1. 定义数据库表结构 a) 表结构关系 i. class classes(m ...

  3. Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie

    Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...

  4. SessionState详解 session有效期时间:默认20分

    为当前应用程序配置会话状态设置. configuration 元素(常规设置架构)   system.web 元素(ASP.NET 设置架构)     sessionState 元素(ASP.NET ...

  5. 详解Session分布式共享(.NET CORE版)

    一.前言&回顾 在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的S ...

  6. 详解session

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp30 一.术语session 在我的经验里,session这个词被滥用的程度 ...

  7. Cookie与Session详解

    来源:<PHP核心技术与最佳实践> 列旭松 陈文 著 Cookie与Session详解读书笔记,从概念.操作.应用.注意事项以及区别等几方面详细阐述两者的基础知识,它们都是针对HTTP协议 ...

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

    本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...

  9. session及cookie详解(七)

    前言 文章说明 在每整理一个技术点的时候,都要清楚,为什么去记录它.是为了工作上项目的需要?还是为了搭建技术基石,为学习更高深的技术做铺垫? 让每一篇文章都不是泛泛而谈,复制粘贴,都有它对自己技术提升 ...

随机推荐

  1. centos环境下安装redis

    1.安装gcc和gcc-c++ 使用which gcc 和which g++检查是否已经安装,若已有安装,跳过下面安装步骤 安装gcc yum -y install gcc 安装gcc-c++ yum ...

  2. Qt无法正确 sendMessage 的消息

    项目背景: 项目需要将vc中的代码移植到Qt中,而且由于使用的SDK是32位,所以,Qt使用的版本是MinGW32,另外下载的也是官网最新的版本Qt5.11.1. 系统环境:Windows10 在将w ...

  3. 【easy】235. Lowest Common Ancestor of a Binary Search Tree

    题意大概是,找两个节点的最低公共祖先 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNod ...

  4. pwnable.tw dubblesort

    (留坑,远程没打成功) int __cdecl main(int argc, const char **argv, const char **envp) { int t_num_count; // e ...

  5. Python简单爬虫获取岗位招聘人数

    #encoding=utf-8 import selenium import selenium.webdriver import re import time # pip install seleni ...

  6. 配置SSL证书

    在阿里云买了SSL证书,但是访问的时候提示如下图: 这个就郁闷了,按照这个方式导入了证书,但还是不行,后来得到同事的帮助,使用这个工具 然后重启下服务器就可以了.

  7. 手把手详解持续集成之GitLab CI/CD

    一.环境准备 首先需要有一台 GitLab 服务器,然后需要有个项目:这里示例项目以 Spring Boot 项目为例,然后最好有一台专门用来 Build 的机器,实际生产中如果 Build 任务不频 ...

  8. 如何选择 Apache Tomcat 与 JDK 版本

    Apache Tomcat Version

  9. 小米众筹新品---8H凉感慢回弹记忆绵枕 99元 上手开箱图

    在众目睽睽之下,商城终于成了杂货铺 众筹发布了第98期新品——8H凉感慢回弹记忆绵枕H1,售价为99元,主打舒适凉感,抗菌吸湿,三曲线护颈设计,3~5秒慢回弹. 本着程序员的读书历程:x 语言入门 — ...

  10. vertx的ShardData共享数据

    数据类型 一共4种 synchronous shared maps (local) asynchronous maps (local or cluster-wide) asynchronous loc ...