Session与Cookie的概念,机制和区别
以下仅是我个人根据参考资料得出的一些见解,如有错误之处感谢指出。
Session和Cookie简介
何为Session?
Session在计算机网络中称为“会话控制”。
Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。————《百度百科 session》
web 请求通过http协议实现。 而 http 协议是 无状态, 无连接的协议,即无法在多次http请求中, 阻碍了可与用户动态交互,并根据用户不同,展现不同内容的应用程序的实现。
于是session应运而生,session通常为 服务器服务, 后端语言(例如java,php都有实现。) 为每个不同用户创建单独的session会话并分配了不同的唯一身份 SessionID ,根据该sessionID,服务器可区别用户,并读取该sessionid存储的值。
在Linux系统nginx服务器中,每个用户的session存在temp目录下。
同时应用程序可以在每一次session内存储,读取并验证用户状态和信息,例如登录状态,身份信息。
session有自己的生命周期,具有创建,过期,销毁的过程,一般不需要应用程序去管理,只需关心应用程序自己的数据是否存在即可。
简单来说,Session可以让 后端的应用程序在服务器的每个用户会话中存储数据。
何为Cookie?
Cookie是用户本地浏览器存储数据的一种机制,它通常以域名作路径为标识,即,每个网址/域名都可视为一个目录/路径,Cookie存在这些目录下。
另外Cookie有一套安全机制(虽然并不十分安全),例如禁止跨域,有失效时间等。
Cookie由浏览器程序实现和管理。
简单来说,Cookie就是通过javaScript脚本,存储和读取 网站在用户本地浏览器中缓存数据。
Session和Cookie区别
- Cookie数据是存储在用户浏览器中的,而Session是存储在服务器中的。
- Cookie以域名为路径存储,Session为每个用户单独创建会话。
- 通常在浏览器的网络请求中,会带上Cookie字段,让服务器可以读取存储的Cookie值。服务器想要存储Cookie时,会带上Set-Cookie字段,浏览器会自动存储。而Session只能由后端应用程序存储和读取值。
等…
Session机制如何辨别用户
http无状态,无连接,为何session能够识别每个用户的请求呢?答案在于,session依靠cookie传输认证数据识别。
在一次向服务器的请求中,若请求中不存在包含sessionID的cookie,则服务器会为用户创建会话,并生成唯一的SessionID。
然后在响应中通过Set-Cookie返回该SessionID。在用户本地接收响应后,浏览器将该SessionID存储下来,并在之后的请求中的Cookie带上该SessionID。
服务器响应请求时发现了SessionID,会恢复该会话,并载入存储的会话变量。以便必要时应用程序可以读取自己存储的值。
关于微信小程序的cookie
微信小程序中并未自动管理cookie,需要自己根据服务器数据来保存并在请求时带上sessionID,才能在服务器中进行会话识别。
参考【微信小程序】后端无法保持session的原因及解决办法