ExpressJS 会话(session)

  • 会话(session)

    HTTP是无状态的;为了将一个请求与任何其他请求相关联,您需要一种在HTTP请求之间存储用户数据的方法。Cookies和URL参数都是在客户端和服务器之间传输数据的合适方法。但是它们既可读又在客户端。会议正是解决了这个问题。您为客户端分配一个ID,它将使用该ID发出所有其他请求。与客户端关联的信息存储在链接到该ID的服务器上。
    我们将需要express-session,因此请使用以下代码进行安装。
    
    npm install --save express-session
    
    我们将放置session和cookie-parse中间件。在此示例中,我们将使用默认存储区(即MemoryStore)来存储会话,。切勿在生产环境中使用此功能。session中间件为我们处理所有事情,即创建会话,设置会话cookie和在req对象中创建会话对象。每当我们再次从同一个客户端发出请求时,我们都会将他们的会话信息与我们一起存储(假设服务器没有重新启动)。我们可以向会话对象添加更多属性。在下面的示例中,我们将为客户端创建一个视图计数器。
    
    var express = require('express');
    var cookieParser = require('cookie-parser');
    var session = require('express-session');
    
    var app = express();
    
    app.use(cookieParser());
    app.use(session({secret: "Shh, its a secret!"}));
    
    app.get('/', function(req, res){
       if(req.session.page_views){
          req.session.page_views++;
          res.send("You visited this page " + req.session.page_views + " times");
       } else {
          req.session.page_views = 1;
          res.send("Welcome to this page for the first time!");
       }
    });
    app.listen(3000);
    
    上面的代码所做的是,当用户访问该站点时,它将为该用户创建一个新会话并为他们分配一个cookie。下次用户来时,将检查cookie并相应地更新page_view会话变量。
    现在,如果您运行该应用程序并转到localhost:3000,将显示以下输出。
    如果您重新访问页面,页面计数器将增加。以下屏幕截图中的页面刷新了22次。