[关闭]
@kexinWeb 2017-03-06T20:24:34.000000Z 字数 3485 阅读 2300

cookie、session 在 Node.js(express) 中的应用

cookie session


写在前面

  • HTTP是一种无状态的协议,也就是,当客户端发出请求的时候,无法得知上一次请求的状态。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。所以产生了cookie和session这两门技术来解决这一问题。

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

1.什么是cookie?

Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Netscape、Firefox、Opera等都支持Cookie。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。


2.使用cookie一般过程

3.其他

在浏览器地址栏输入javascript:alert (document. cookie)就可以了(需要有网才能查看)。JavaScript脚本会弹出一个对话框显示本网站颁发的所有Cookie的内容

如果浏览器不支持Cookie(如大部分手机中的浏览器)或者把Cookie禁用了,Cookie功能就会失效。

session

除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力。

1.什么是session?

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

2.session的产生

cookie 虽然很方便,但是使用 cookie 有一个很大的弊端,cookie 中的所有数据在客户端就可以被修改,数据非常容易被伪造,那么一些重要的数据就不能存放在 cookie 中了,而且如果 cookie 中数据字段太多会影响传输效率。为了解决这些问题,就产生了 session,session 中的数据是保留在服务器端的。

cookie在Node.js(express)中的应用

1.下载安装

在express框架中使用cookie需要加载另外一个模块: cookie-parser(https://github.com/expressjs/cookie-parser

$ npm install cookie-parser

2.使用

使用cookie-parser比较简单

  1. var express = require('express')
  2. var cookieParser = require('cookie-parser')
  3. var app = express()
  4. app.use(cookieParser())


  1. var express = require('express')
  2. var cookieParser = require('cookie-parser')
  3. var app = express()
  4. app.use(cookieParser())
  5. app.get('/', function (req, res) {
  6. // Cookies that have not been signed
  7. console.log('Cookies: ', req.cookies)
  8. // Cookies that have been signed
  9. console.log('Signed Cookies: ', req.signedCookies)
  10. })
  11. app.listen(8080)

session在Node.js中的应用

1.下载安装

npm install express-session

2.Note

3.配置项

  • cookie: 默认值为 { path: '/', httpOnly: true, secure: false, maxAge: null }
  • genid: 调用函数返回新的session ID,函数的返回值就是新生成的session ID
  • name: session ID cookie的名称, 最好每个应用程序的name设置不一样
  • secret: 必需选项,用于加密

4.req.session

用于获取相关session配置,用req.session对象可以访问相关的session数据。

5.Session.regenerate(callback)

重新生成session会话

6.Session.destroy(callback)

注销会话

7.举个例子

  1. //加载express模块
  2. var express = require('express')
  3. //加载url解析模块
  4. var parseurl = require('parseurl')
  5. //加载express-session模块
  6. var session = require('express-session')
  7. //创建一个express应用程序app
  8. var app = express()
  9. //配置session选项
  10. app.use(session({
  11. secret: 'keyboard cat',
  12. resave: false,
  13. saveUninitialized: true
  14. }))
  15. app.use(function (req, res, next) {
  16. var views = req.session.views
  17. if (!views) {
  18. views = req.session.views = {}
  19. }
  20. // get the url pathname
  21. var pathname = parseurl(req).pathname
  22. // count the views
  23. views[pathname] = (views[pathname] || 0) + 1
  24. next()
  25. })
  26. app.get('/foo', function (req, res, next) {
  27. res.send('you viewed this page ' + req.session.views['/foo'] + ' times')
  28. })
  29. app.get('/bar', function (req, res, next) {
  30. res.send('you viewed this page ' + req.session.views['/bar'] + ' times')
  31. })

参考资料

https://github.com/expressjs/session
https://github.com/expressjs/cookie-parser

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注