zoukankan      html  css  js  c++  java
  • Cookie & Session

    Too young too simple.

     

    由于HTTP协议是无状态的协议,每次请求都是一个独立过程,所以下一次请求无法得知上一次请求产生的一些数据因此产生了cookie,作用是在一次请求介绍后保存一些数据到客户端,客户端在下次请求时携带上这些数据来确定状态。

    session & cookie的区别:

    1. session 存储在服务器端(如果使用的是node,则存储在node服务器端),cookie 存储在客户端(用户本地浏览器)
    2. session 默认被存在在服务器的一个文件里(不是内存)。也可以存储在文件、数据库或者内存中,比如Redis等中,建议不要存在mysql等数据库中,因为session读取写入很频繁,对数据库压力很大,建议存储在内存数据库中。
    3. session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)

    因为session存储在服务器端,所以相对cookie就安全多了。在客户端的cookie里面存放一个ID,然后用这个ID去匹配服务器端的session的,所以客户端只知道这个ID,其他信息都是服务器才知道。

    现在一些轻量级的web库,用的是加密的cookie,而不需要用session,这样的好处就是极大的减轻了服务器的工作强度。之前用session不用cookie就是考虑到cookie是存储在客户端,不安全。而现在使用加密的cookie,理论上是安全的。

    安全性:

      session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出cookie,我们叫做session cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到 sessionid=KWJHUG6JJM65HS2K6之类的字符串。
      通过HTTP请求报文头的Cookie属性的jsessionid的值关联起来的!当然也可以通过重写URL的方式将会话ID附带在每个URL的后面。
      session cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如 session cookie安全了。
      通常session cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)

    获取

      session是由服务器创建的,开发人员可以在服务器上通过request对象的getsession方法得到session
     

    常用使用场景:

    1. 一般情况,登录信息等重要信息存储在session中,其他信息存储在cookie中。(用户验证 一般会用session)

    有效时长

    session的有效时长

    服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。具体根据服务器设置,一般在二三十分钟左右。

    计算开始时间:从session不活动的时候开始计算,一旦session被访问,计时清0。所以:只要session一直活动,就总不会过期

    服务器端设置session的过期时间。

    cookie的有效时长

    cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。

    通过过期时间可以设置cookie的有效时长

    若不设置过期时间: 表示这个cookie的生命周期为浏览器回话期间,关闭访问服务器的浏览器窗口,cookie就消失了。一般称为回话cookie,保存在内存中若设置了过期时间:则cookie会存储在硬盘上,直到超过有效时间。

    cookie:如果用户禁用了浏览器的cookie或者不小心删除了cookie, 则会失效;

    默认cookies失效时间是直到关闭浏览器,cookies失效,也可以指定cookies时间。

  • 相关阅读:
    常见的排序算法(四):归并排序
    常见的排序算法(三):快速排序
    常见的排序算法(二):选择排序
    a标签没有闭合引起自动插入很多a标签的问题
    js笔记
    Vue笔记
    CSS笔记
    bootstrap--网格化布局
    backgroud图片充满元素的方法
    bootstrap--概述
  • 原文地址:https://www.cnblogs.com/bala/p/7815364.html
Copyright © 2011-2022 走看看