nodejs——搭建电影博客(session持久会话)
2016-07-29 20:59
267 查看
总所周知,客户端和服务器端通信的协议一般采用的是无状态HTPP/HTTPS协议,这样就需要一种机制来记录客户端与服务器端之间的会话内容——(cookie+session),针对不同的客户端,对应的会话是独立的。
cookie:用于在客户端记录用户的身份;
session:用于服务器端记录用户的信息来确定的身份。
在session出现以前,服务器端和客户端都是通过cookie保存用户信息,每次http请求,客户端都会带给服务器当前域下的cookie值,浏览器收到客户端传来的cookie或者加密以后的cookie后,对其进行解析,辨识客户端;解析后的用户数据采用键值对的形式存储于客户端。 session存储于服务器端与cookie配合使用。当服务器端收到客户端http请求时,首先检查其是否有session标识(一般为sessionid),若有,则说明服务器已经为该客户端创建过session,根据session标识找到其对应的session即可;若无session标识,服务器就会为客户端创建一个session啦!并且生成一个sessionid,且这个sessionid还是唯一的,很难找到回来的字符串喔,以防被伪造!!! 看上图就知道啦,生成的seeionID在响应http请求时传递给客户端,一般放在cookie中。 一般情况下,session是被存储在服务器的内存中的,但是当我们的服务器进程被停止,内存中的session就会被清空啦!
But,通过配置session特性可以将其存储于硬盘中,这样每次服务器重启时,都可以从硬盘中读取,再次使用啦!——这就是所谓的session持久化!!!
对于session的持久化有几种常用的方式:见上图,cookie、内存、redis、mongoDB
本项目开发是基于Express框架的,在Express 3.X中,Express是建立在connect模块的开发;Express的cookieParse是Cookie解析的中间件;Express的session是用来提供会话支持的;在Express的seeion里可以配置secret,防止篡改cookie;key值是cookie的名字;maxAge设置cookie的生存周期,store即设置mongoStore示实例,用于存储会话信息。
Express中的seeion的解析是依赖于CookieParser。首先从cookie中读取加密后的connectsid,然后通过cookieParser解析成对应的sessionid;这个seeionid就被放在request的session中。由express session图中可以看出,CookieParser是必须放在seeion中间件前头的。通过session中间件的时候,首先读取store对象读取当前的session数据,所以当多个请求并发执行时,他们取得的是同一份session数据,每个请求在执行res.end()时,session就会被重新保存一次。
相关文章推荐
- Angularjs 跨域请求
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- 杰奇登录后的东西都是在session里面的
- cookie的secure属性详解
- 浏览器 cookie 限制
- 使用ruby部署工具mina快速部署nodejs应用教程
- ASP中SESSION无法保存问题的解决办法
- Oracle中的Connect/session和process的区别及关系介绍
- Nodejs从有门道无门菜鸟起飞必看教程
- Google官方支持的NodeJS访问API,提供后台登录授权
- 浅谈Nodejs观察者模式
- nodejs教程之环境安装及运行
- nodejs中的fiber(纤程)库详解
- 基于NodeJS的前后端分离的思考与实践(五)多终端适配
- 基于NodeJS的前后端分离的思考与实践(二)模版探索
- Node.js编程中客户端Session的使用详解
- 实例详解Nodejs 保存 payload 发送过来的文件
- 我的NodeJs学习小结(一)