关于字体设计的网站,珠海建网站价格,域名注册平台,佛山市网站建设分站企业一、 Session 简单介绍 session 是另一种记录客户状态的机制#xff0c;不同的是 Cookie 保存在客户端浏览器中#xff0c;而 session 保存在服务器上。 Cookie 数据存放在客户的浏览器上#xff0c;Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于 Ses…一、 Session 简单介绍 session 是另一种记录客户状态的机制不同的是 Cookie 保存在客户端浏览器中而 session 保存在服务器上。 Cookie 数据存放在客户的浏览器上Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于 Session 保存到服务器上所以当访问量增多的时候会比较占用服务器 的性能。单个 cookie 保存的数据大小不能超过 4K很多浏览器都限制一个站点最多保存 20 个 cookie。Session 没有这方面的限制。Session 是基于 Cookie 进行工作的。
二、 Session 的工作流程
当浏览器访问服务器并发送第一次请求时服务器端会创建一个 session 对象生成一 个类似于 key,value 的键值对 然后将 key(cookie)返回到浏览器(客户)端浏览器下次 再访问时携带 key(cookie)找到对应的 session(value)。
三、 express-session 的使用
https://www.npmjs.com/package/express-session
1、安装 express-session
cnpm install express-session --save 2、引入 express-session
var session require(express-session); 3、 设置官方文档提供的中间件
app.use(session({ secret: keyboard cat, resave: true, saveUninitialized: true })) 4、使用 设置值
req.session.username 张三; 获取值
req.session.username四、 express-session 的常用参数
app.use(session({ secret: 12345, name: name, cookie: {maxAge: 60000}, resave: false, saveUninitialized: true
}));五、 express-session 的常用方法
req.session.destroy(function(err) { /*销毁 session*/ })
req.session.username张三; //设置 session
req.session.username //获取 session
req.session.cookie.maxAge0; //重新设置 cookie 的过期时间,它会销毁所有的sessionconst express require(express)
const ejs require(ejs)
const bodyParser require(body-parser)
const cookieParser require(cookie-parser)
const session require(express-session)
const app new express()
// 配置模板引擎
app.engine(html, ejs.__express)
app.set(view engine, html)
// 配置静态web目录
app.use(express.static(static))// 配置第三方中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 配置cookieParser中间件
app.use(cookieParser(zep))
// 配置session的中间件
app.use(session({secret: keyboard cat, // 服务器端生成session的签名name: sessionName, // 修改session对应的cookie的名称resave: false, // 强制保存 session 即使它并没有变化saveUninitialized: true, // 强制将未初始化的session存储cookie: { maxAge: 1000*60, // 设置过期时间为一分钟secure: false // true 表示只有https协议才能访问cookie},rolling: true // 在每次请求时强行设置cookie这将重置cookie的过期时间默认值为false
}))
app.get(/book, (req, res) {// 设置sessionreq.session.username 张三三res.send(book页面)
})
app.get(/getbook, (req, res) {// 获取sessionif(req.session.username) {res.send(req.session.username -已登录)} else {res.send(没有登录)}
})app.get(/, (req, res) {// 设置cookie 如果cookie没有过期的话关闭浏览器后重新打开cookie仍然还在不会被销毁res.cookie(username, 张三, {maxAge: 1000*60*60,signed: true})res.send(首页)
})app.get(/article, (req, res) {// 获取cookielet username req.cookies.usernameconsole.log(username)res.send(新闻页面-- username)
})app.get(/user, (req, res) {// 获取加密的cookielet username req.signedCookies.usernameres.send(用户页面-- username)
})app.get(/login, (req, res) {// 设置sessionreq.session.username 张三啊res.send(执行登录)
})app.get(/loginOut, (req, res) {// 1.设置session的过期时间为0//req.session.cookie.maxAge 0// 2.销毁指定的session//req.session.username // 3.销毁所有的sessionreq.session.destroy()res.send(退出登录)
})app.post(/doLogin, (req, res) {var body req.bodyconsole.log(body)res.send(执行提交)
})app.listen(3000)六、 负载均衡配置 Session把 Session 保存到数据库里面
需要安装 express-session 和 connect-mongo 模块引入模块
const session require(express-session);
const MongoStore require(connect-mongo);配置中间件
// 配置session的中间件
app.use(session({secret: keyboard cat, // 服务器端生成session的签名name: sessionName, // 修改session对应的cookie的名称resave: false, // 强制保存 session 即使它并没有变化saveUninitialized: true, // 强制将未初始化的session存储cookie: { maxAge: 1000*60, // 设置过期时间为一分钟secure: false // true 表示只有https协议才能访问cookie},rolling: true, // 在每次请求时强行设置cookie这将重置cookie的过期时间默认值为falsestore: MongoStore.create({mongoUrl: mongodb://admin:adminlocalhost/itying?authSourceadminw1,// mongoOptions: advancedOptions ,touchAfter: 24 * 3600 // 不管发出了多少请求在24小时内只更新一次session除非你改变了这个session})
}))const express require(express)
const ejs require(ejs)
const bodyParser require(body-parser)
const cookieParser require(cookie-parser)
const session require(express-session)
const MongoStore require(connect-mongo);const app new express()
// 配置模板引擎
app.engine(html, ejs.__express)
app.set(view engine, html)
// 配置静态web目录
app.use(express.static(static))// 配置第三方中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 配置cookieParser中间件
app.use(cookieParser(zep))
// 配置session的中间件
app.use(session({secret: keyboard cat, // 服务器端生成session的签名name: sessionName, // 修改session对应的cookie的名称resave: false, // 强制保存 session 即使它并没有变化saveUninitialized: true, // 强制将未初始化的session存储cookie: { maxAge: 1000*60, // 设置过期时间为一分钟secure: false // true 表示只有https协议才能访问cookie},rolling: true, // 在每次请求时强行设置cookie这将重置cookie的过期时间默认值为falsestore: MongoStore.create({mongoUrl: mongodb://admin:adminlocalhost/itying?authSourceadminw1,// mongoOptions: advancedOptions ,touchAfter: 24 * 3600 // 不管发出了多少请求在24小时内只更新一次session除非你改变了这个session})
}))
app.get(/book, (req, res) {// 设置sessionreq.session.username 张三三res.send(book页面)
})
app.get(/getbook, (req, res) {// 获取sessionif(req.session.username) {res.send(req.session.username -已登录)} else {res.send(没有登录)}
})app.get(/, (req, res) {// 设置cookie 如果cookie没有过期的话关闭浏览器后重新打开cookie仍然还在不会被销毁res.cookie(username, 张三, {maxAge: 1000*60*60,signed: true})res.send(首页)
})app.get(/article, (req, res) {// 获取cookielet username req.cookies.usernameconsole.log(username)res.send(新闻页面-- username)
})app.get(/user, (req, res) {// 获取加密的cookielet username req.signedCookies.usernameres.send(用户页面-- username)
})app.get(/login, (req, res) {// 设置sessionreq.session.username 张三啊res.send(执行登录)
})app.get(/loginOut, (req, res) {// 1.设置session的过期时间为0//req.session.cookie.maxAge 0// 2.销毁指定的session//req.session.username // 3.销毁所有的sessionreq.session.destroy()res.send(退出登录)
})app.post(/doLogin, (req, res) {var body req.bodyconsole.log(body)res.send(执行提交)
})app.listen(3000)