中间件:express-session

express-session

github仓库

session 介绍:

  • session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。

  • Session的用途:

    • session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
      当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
      session可以和Redis或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)
      丢失。

      session 的工作流程

  • 当浏览器访问服务器并发送第一次请求时,服务器端会创建一个session对象,生成一个类似于
    key,value的键值对,然后将key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带key(cookie),
    找到对应的session(value)。 客户的信息都保存在session中

    安装

  • $ npm install express-session

    API

  • var session = require(‘express-session’)

    配置

    1
    2
    3
    4
    5
    app.use(session({
    secret: 'my key',//配置加密字符串,他会在原有加密基础上凭据上自己定义的字符串加密信息,防止客户端恶意伪造
    resave: false,
    saveUninitialized: true//强制将为初始化的session 储存,无论是否使用session 都默认分配一个秘钥
    }))

session 配置图

使用

  • 官方案例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    var express = require('express')
    var parseurl = require('parseurl')
    var session = require('express-session')

    var app = express()

    app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
    }))

    app.use(function (req, res, next) {
    if (!req.session.views) {
    req.session.views = {}
    }

    // get the url pathname
    var pathname = parseurl(req).pathname

    // count the views
    req.session.views[pathname] = (req.session.views[pathname] || 0) + 1

    next()
    })

    app.get('/foo', function (req, res, next) {
    res.send('you viewed this page ' + req.session.views['/foo'] + ' times')
    })

    app.get('/bar', function (req, res, next) {
    res.send('you viewed this page ' + req.session.views['/bar'] + ' times')
    })
  • 简单调用

    1
    2
    3
    req.session.foo = 'bar' //添加

    req.session.foo //获取

ps: 默认session 是存储在内存中的,需要进行持久化存储,到数据库中

本网站作品部分来自于网络,感谢开源社区的诸多开发者 My_Github and My_E-mail

Copyright © 2013 - 2019 Ruoduan's Blog All Rights Reserved.

访客数 : | 访问量 :

{% if theme.fireworks %} {% endif %} {% if theme.canvas_nest %} {% endif %} {% if theme.Background_music %} {% endif %}