Kivi

没有什么远大理想,只是永远都不会满足而已


  • 首页

  • 关于

  • 标签

  • 归档

对session cookie的理解

发表于 2015-03-13 更新于 2017-07-02 分类于 web 阅读次数:
本文字数: 1.9k 阅读时长 ≈ 2 分钟

参考资料

Session原理简述(赞一下这个,毕竟是自己写的,而且博客风格很好,简单,清晰)
cookie 和session 的区别详解
cookie机制和session机制的原理和区别[转]
HTTP Session和Cookie工作原理
Cookie和会话状态session的工作原理
session原理

为什么要使用session和cookie

为了解决HTTP是个无状态协议所带来的问题

定义

  • session

    服务端为了保持解决Http无状态带来的问题的一种保持客户端与服务器会话状态的一种机制
    
  • cookie

    客户端为了配合session,保持客户端与服务端会话状态的一种机制
    

个人总结,高手勿怪

引用高手博客
cookie的机制采用的是在客户端保持状态的方案,cookie占用客户端的存储空间,一般是内存
session的机制采用的是在服务端保持状态的一种方案,session占用服务端的内存空间
session机制可能需要借助cookie来达到保存标识的目的(实际上还有其他选择,比如重写URL或者隐藏表单域)

定义不是特别好理解,请看下面的栗子

小栗子

注意
我使用的语言是Node.js

  • session

    可以理解为一张放在服务器内存的表,记录了类似这样的信息
            
    1
    2
    3
    sessions: { 
    'phCp-9zlu80ib8o9RLlLac97jG25xMYA':'{"cookie":{"originalMaxAge":600000,"expires":"201504-18T03:46:16.449Z","secure":false,"httpOnly":true,"path":"/"},"views":1}'
    }
    'phCp-9zlu80ib8o9RLlLac97jG25xMYA':这个就是SESSIONID,如果客户端发送过来的cookie的值和SESSIONID想匹配,那么服务端就能通过req.session得到SESSIONID后对应的结果。('{"cookie":{"originalMaxAge":600000,"expires":"201504-18T03:46:16.449Z","secure":false,"httpOnly":true,"path":"/"},"views":1}' ) "cookie":{"originalMaxAge":600000,"expires":"201504-18T03:46:16.449Z","secure":false,"httpOnly":true,"path":"/"}:这个事配置信息,可以看到服务端写入客户端的cookie的一些基本信息,这个实在配置session的时候就决定了的 "views":1:这个事用户自定义字段,服务端通过req.session.view=1来设定的。用户的cookie还没有过期,服务端与之匹配的SESSIONID这个字段就会存在,此时再进行一次访问,服务端就可以通过view字段得知该用户已经浏览过一次该页面了,然后将view++。这样就可以统计用户的访问次数了。
  • cookie

    存在于客户端(可以使内存,也可以是硬盘)。在cookie还未过期的时候,客户端发送的http请求头信息中,会带有如图绿框所示的字段
    Cookie属性下有三个字段:上面两个是其他网页设置的cookie值,最下面的connect.sid,就是我们刚刚设定的SESSIONID,看起来和上面的SESSIONID貌似不太一样,是因为这个值被加密了。
    
    服务端接收到客户端请求之后,在http应答的头信息中设置cookie,看下图红框所示的字段中,有一个set-cookie字段,这里面记录了cookie的基本属性和加密了的SESSIONID
    

参考图片

# web
新手常跳的一些nginx坑
Linux常用命令总结
  • 文章目录
  • 站点概览
kivi

kivi

nodejs | server
58 日志
17 分类
32 标签
RSS
  1. 1. 参考资料
  2. 2. 为什么要使用session和cookie
  3. 3. 定义
  4. 4. 小栗子
© 2019 kivi | 173k | 2:37
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0
|