计算机网络基础知识之Cookie与Session

Posted 黑黑白白君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络基础知识之Cookie与Session相关的知识,希望对你有一定的参考价值。



0)为什么关注Cookie和Session?

  • 什么是会话?

    会话是指一个终端用户与交互系统进行通讯的过程
  • 比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。
  • 会话较多用于网络上,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。
  • 用户打开浏览器,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话。
  • 什么是会话跟踪?

    会话跟踪是一种维护用户状态(数据)的方法。它在Servlet中也称为会话管理。

    • 会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
    • 常用的会话跟踪技术是Cookie与Session
      • Cookie通过在客户端记录信息确定用户身份
      • Session通过在服务器端记录信息确定用户身份

  • 为什么需要会话跟踪技术?

    Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的,意味着每个请求都被视为新请求。因此我们需要使用会话跟踪技术来维护状态

    • 换句话说,每次用户向服务器请求时,服务器都会将该请求视为新请求。因此,我们需要维护用户的状态以识别特定用户。

在程序中,会话(Session)跟踪是很重要的事情。

1、理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。

  • 例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。

2、一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话

  • 即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制,它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。


1)cookie和session的原理

1.1 什么是cookie?

cookie采用的是客户端的会话状态的一种储存机制。

  • 它是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。

具体介绍可见本栏目的《【计算机网络】深入了解Cookie机制》。(https://blog.csdn.net/m0_37621024/article/details/116900197)

1.2 什么是session

session是一种服务器端的信息管理机制。

  • 它把这些文件信息以文件的形式存放在服务器的硬盘空间上(这是默认情况,可以用memcache把这种数据放到内存里面)。

具体介绍可见本栏目的《【计算机网络】深入了解Session机制》。(https://blog.csdn.net/m0_37621024/article/details/116902165)


2)cookie和session的区别

2.1 存储的地方不同

cookie数据存放在客户端浏览器上,session数据放在服务器上。

  • Cookie机制是通过检查客户身上的通行证来确定客户身份。
  • Session机制就是通过检查服务器上的客户明细表来确认客户身份。

简单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面

  • 客户端每次请求服务器的时候会发送当前会话的session_id,服务器根据当前session_id判断相应的用户数据标志,以确定用户是否登录,或具有某种权限

2.2 安全性

  • cookie是以明文的方式存放在客户端的,安全性低,可以通过一个加密算法进行加密后存放。
  • session存放于服务器的内存中,所以安全性好。

对于session:

  • 由于数据是存储在服务器上面,所以你不能伪造,但是如果你能够获取某个登录用户的session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。
  • session_id是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性

2.3 网络传输量

  • cookie会传递消息给服务器。
  • session本身存放于服务器,不会有传送流量。

2.4 生命周期

以20分钟为例:

  • cookie的生命周期是累计的:
    • 从创建时,就开始计时,20分钟后,cookie生命周期结束。
  • session的生命周期是间隔的
    • 从创建时,开始计时如在20分钟,没有访问session,那么session生命周期被销毁。
    • 但是,如果在20分钟内(如在第19分钟时)访问过session,那么,将重新计算session的生命周期。
  • 关机会造成session生命周期的结束,但是对cookie没有影响。

2.5 访问范围

  • cookie为多个用户浏览器共享。
  • session为一个用户浏览器独享。

3)为什么session通常会比cookie安全?

  • cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。

  • 要想攻破session,得分两步:

    1、要得到sessionID。

    • 攻破cookie后,你要得到sessionID。
    • sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。

    2、要取有效sessionID。

    • sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了。
    • session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。
  • 使session失效的方法:
    1.关闭tomcat
    2.重启web应用
    3.session时间到
    4.无效的session

4)选择cookie还是session?

  1. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
  2. session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能,考虑到减轻服务器性能方面,应当使用cookie
  3. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
  4. cookie的增多无疑会加重网络请求的开销,而且每次请求都会将cookie完整的带上,因此对于那些“每次请求都必须要携带的信息(如身份信息、A/B分桶信息等)”,才适合放进cookie中

其他:

  • session很容易失效,用户体验很差。
  • 虽然cookie不安全,但是可以加密。
  • cookie也分为永久和暂时存在的。
  • 浏览器有禁止cookie功能,但一般用户都不会设置。
  • 一定要设置失效时间,要不然浏览器关闭就消失了。
  • 记住密码功能就是使用永久cookie写在客户端电脑,下次登录时,自动将cookie信息附加发送给服务端。
  • application是全局性信息,是所有用户共享的信息。
    • 如可以记录有多少用户现在登录过本网站,并把该信息展示给所有用户。


【部分内容参考自】

  • cookie和session的详解与区别:https://www.cnblogs.com/l199616j/p/11195667.html
  • Cookie的工作原理和应用详解:https://blog.csdn.net/sinat_36184075/article/details/105646140
  • Cookie详解:https://blog.csdn.net/zcl_love_wx/article/details/51992999
  • [面试]cookie和session常见面试题:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/78552633

以上是关于计算机网络基础知识之Cookie与Session的主要内容,如果未能解决你的问题,请参考以下文章

04_web基础之cookie与session

Go语言基础之Cookie和Session

Django框架基础之session

django基础知识之状态保持session:

Django之Session与Cookie

cookie与session