- /*
- session 数据存放在服务端,但索引存放在浏览器,浏览器是根据cookieid识别对应的session
- npm i express-session -S 使用session模块
- */
- const express = require('express');
- const session = require('express-session'); // 解析session的模块 express-session
- const app = express();
- //启动session的中间件,公式
- app.use(session({ //要求客户端设置一个加密的cookie
- secret:'heaven', //任意字符都行,给cookie加密
- cookie:{maxAge:300000},
- resave:true,
- saveUninitialized:true,
- }))
- //中间件是按先后顺序执行的,所以放在前面拦截
- app.get('/favicon.ico',(req,res)=>{
- return;
- })
- app.get('/',(req,res)=>{
- res.send('你的足迹是'+req.session.lvyou);
- })
- app.get('/:city',(req,res)=>{
- let city = req.params.city;
- // console.log(req.session);
- let cityArr = req.session.lvyou || [];
- cityArr.push(city);
- req.session.lvyou = cityArr;
- res.send("你今天去了"+city);
- })
- app.listen(3000);
- /*
- 将session从内存中提取到mongo数据库内
- npm i connect-mongo -S 将session存入mongo数据库的模块
- */
- const express = require("express"),
- app = express(),
- session = require("express-session"),
- Mongosession = require("connect-mongo")(session),
- mongoose = require("mongoose");
- //连接数据库
- mongoose.connect("mongodb://localhost/bounty",{useNewUrlParser: true})
- //session公式
- app.use(session({
- secret:"doukeyi", //秘钥,加密
- rolling:true, //每次交互(操作页面,a标签,ajax)重新设定时间
- cookie:{maxAge:1000*60*60}, //cookie有效期 1小时
- resave:false, //是否每次请求都重新保存数据
- saveUninitialized:false, //是否默认设置初始值
- store:new Mongosession({
- url:"mongodb://localhost/bounty" //session存入数据库,到期后自动清除数据库
- })
- }))
- /*
- 清除session
- */
- router.get("/logout",function (req,res) {
- req.session.destroy();
- res.redirect("/login");
- })