zoukankan      html  css  js  c++  java
  • Cookies和Session

    image

    cookies是什么?

    cookie 就是浏览器储存在用户电脑上的一小段文本文件。cookie 是纯文本格式,不包含任何可执行的代码。

    Cookie的作用是什么?

    1. HTTP协议是无状态的,对于一个浏览器发出的多次请求,WEB服务器无法区分 是不是来源于同一个浏览器。Cookie可以随HTTP请求一起被传递的额外数据, 用来识别身份.
    2. 记录用户使用历史
      设想你某次登陆过一个网站,下次登录的时候不想再次输入账号了,怎么办?我们可以把这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的一点甜头。

    如何使用Cookie

    1. 服务器通过Set-Cookie 响应头设置Cookie 给客户端一串字符串
      response.setHeader('Set-Cookie', 'sign_in_email=...;HTTPOnly')
    2. 浏览器得到Cookie之后,每次请求(访问)相同页面时都要带上Cookie
    3. 服务器读取Cookie就知道登录用户的信息(email)
    4. 客户端要在一段时间内保存这个Cookie

    用户登录成功 得到一个cookie sign_in_emial
    用户访问首页时 请求里面包含了Cookie
    服务器读取 Cookie


    面试的常见问题

    1. 用Chrome登录再用safari登录, safari会带上cookie吗?
      当然不会
    2. 在windows系统中存在c盘的一个文件, 其他存在硬盘的一个文件.
    3. cookie可以作假吗? 可以(不安全)
    4. cookie 有有效期吗?
      默认在用户关闭页面后关闭, 后台代码可以设置有效期

    Session

    Session是什么?

    前面提到了Cookie有个缺点是可以人为修改,有一定的安全隐患. 于是诞生了Session.


    如何使用Session?
    一般来说Session是基于Cookie实现的,它利用一个sessionId把用户的敏感数据隐藏起来

    1. 将 SessionID(随机数) 通过 Cookie 发给客户端
    2. 客户端访问服务器时, 服务器读取 SessionID
    3. 服务器有一块内存(哈希表)保存了所有 Session
    4. 通过 Session 我们可以得到对应用户的隐私信息, 如 id, email
    5. 这块内存就是服务器上的所有 session
    //预先在服务器端预留对象准备存储各种session
    let sessions = {}
    ...
    let sessionId = Math.random() * 100000
    sessions[sessionId] = {sign_in_email: email}
    response.setHeader('Set-Cookie', `sessionId=${sessionId};HTTPOnly`)
    

    Tips: 使用随机数来做sessionId,其他人只能看到这串随机数,而真正的信息却保存在了服务器端的sessions对象里面。它就像一个密码簿一样,有效的信息与sessionId一一对应,这是服务器的事,保证了安全性。

     

    LocalStorage

    在HTML里面js文件里面的变量或对象,每当网页刷新的时候,就会死掉,又重新生成,虽然还是那个a,但是刷新后已经是另一块内存了。既然它也没变,我们为什么不把一些不重要的信息一直保留着呢,即使刷新了a还是那个a,也就是持久化存储的意义。以前使用Cookie做这个功能,不过Cookie每次发请求会把Cookie里面的所有东西都带着去服务器,加重内存的负担,请求响应时间长,所以html5给了一个新的API localStorage

    LocalStorage本质上还是个hash,不过是存在于浏览器端的,不同于session存在与服务器端的hash。一般存储的都是没有用的或者不敏感的信息。

    localStorage是window的全局属性,常用的有三个方法

    //1. 添加键、值
    var arr = [1,2,3]
    localStorage.setItem('a', arr)
    //2. 获得键、值
    localStorage.getItem('a')
    //3.清空localStorage
    localStorage.clear()
    

    注意,存储JSON对象时,它存的值全是字符串,如果想存储字符串我们需要用到JSON.stringify( )

    1.LocalStorage跟http的值无关
    2.http不会带上Localstorage的值
    3.只有相同域名的页面才能互相读取LocalStorage
    4.每个域名LocalStorage最大存储量为5mb
    5.用来记录有没有提示过用户, 以及一些没用的信息,不能存密码
    6.永久有效,除非用户清理缓存

    SessionStorage(会话存储)

    1234同上
    5.用户关闭页面后失效(会话结束后)


    有趣的问题

      1. cookie和Session是什么关系?
        Session是基于Cookie实现的, 因为Session必须将SessionID放到cookie里面然后发到客户端

      2. cookie和localstorage的区别
        cookie会被带到服务器中, 一般大小为4kb , 而localstorage不会, 一般大小为5mb.

      3. LocalStorage和SessionStorage关系
        SessionStorage用户关闭页面后失效而LocalStorage不会.

  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/wfy680/p/12354128.html
Copyright © 2011-2022 走看看