Seeion 和案例

简介: Seeion 和案例

三、sessionStorage(会话存储)

1、是什么

  • 客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 Session 对象,存储结构为 ConcurrentHashMapSession 弥补了 HTTP 无状态特性,服务器可以利用 Session 存储客户端在同一个会话期间的一些操作记录。
  • 服务器第一次接收到请求时,开辟了一块 Session 空间(创建了Session对象),同时生成一个 sessionId ,并通过响应头的 Set-Cookie:JSESSIONID=XXXXXXX 命令,向客户端发送要求设置 Cookie 的响应; 客户端收到响应后,在本机客户端设置了一个 JSESSIONID=XXXXXXXCookie 信息,该 Cookie 的过期时间为浏览器会话结束;

在这里插入图片描述

  • 接下来客户端每次向同一个网站发送请求时,请求头都会带上该 Cookie信息(包含 sessionId ), 然后,服务器通过读取请求头中的 Cookie 信息,获取名称为 JSESSIONID 的值,得到此次请求的 sessionId
  • 会话,代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续。
  • cookie中存放着一个sessionID,请求时会发送这个ID,Session依据Cookie来识别是否是同一个用户;
  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
  • session因为请求(request对象)而产生;session的创建与使用总是在服务端,浏览器从来都没有得到过session对象;
  • session是一个容器,数据存储在用户浏览器中,可以存放会话过程中的任何对象;
  • session是一种http存储机制,目的是为武装的http提供持久机制。
  • 设置、读取方便,甚至页面刷新不丢失数据
  • 容量较大, sessionStroage 约 5M,localStorage 约 20 M
  • 只能存储字符串,可以将对象 JSON.stringify() 编码后存储
  • 生命周期为关闭浏览器窗口,并且在 同一个窗口(页面)下数据是可以共享的,数据以键值对的形式存储使用

2、使用

  1. 存储数据
     sessionStorage.setItem(key,value)
    
  2. 获取数据
     sessionStorage.getItem(key)
    
  3. 删除数据
     sessionStorage.removeItem(key)
    
  4. 删除所有数据数据
     sessionStorage.clear()
    

四、Token

  • 一个Token就是一些信息的集合;
  • 在Token中包含足够多的信息,以便在后续请求中减少查询数据库的几率;
  • 服务端需要对cookie和HTTP Authrorization Header进行Token信息的检查;
  • 基于上一点,你可以用一套token认证代码来面对浏览器类客户端和非浏览器类客户端;
  • 因为token是被签名的,所以我们可以认为一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的;

五、案例:记住用户名

思路:

  1. 把数据存起来,用到本地存储
  2. 关闭页面,也可以显示用户名,所以用 localStorage
  3. 打开页面,先判断是否有这个用户名,如果有,就在表单里面显示用户名,并且勾选复选框
  4. 当复选框发生改变的时候 change 事件
<body>
     <input type="text" id="username">
     <input type="checkbox" id="remember">
     记住用户名
     <script>
         var username = document.querySelector('#username');
         var username = document.querySelector('#remember');
         if (localStroage.getItem('username')) {
             username.value = localStorage.getItem('username');
             remember.checked = true;
         }
         remember.addEventListener('change',function(){
             if (this.checked) {
                 localStorage.setItem('username',username.value)
             }else{
                 localStorage.removeItem('username');
             }
         })
     </script>
</body>
相关文章
|
8月前
|
数据安全/隐私保护
基础项目实用案例
基础项目实用案例
188 2
|
10月前
|
SQL 消息中间件 缓存
|
10月前
|
JavaScript 前端开发 Java
案例综合题。
案例综合题。
39 0
|
11月前
|
前端开发 JavaScript
全选反选案例
全选反选案例
65 0
|
NoSQL Redis
StringRedisTemplate的一个小案例(三)
StringRedisTemplate的一个小案例(三)
97 0
|
供应链 算法 数据可视化
案例场景分析 | 学习笔记
快速学习案例场景分析。
151 0
案例场景分析 | 学习笔记
|
架构师 数据安全/隐私保护 开发者
案例分析|学习笔记
快速学习案例分析。
84 0
案例分析|学习笔记
|
前端开发
使用案例
使用案例
118 0
|
搜索推荐 索引 Python
特殊案例,为什么a, b = b, a结果跟你想的不一样?
特殊案例,为什么a, b = b, a结果跟你想的不一样?
145 0
特殊案例,为什么a, b = b, a结果跟你想的不一样?