zoukankan      html  css  js  c++  java
  • session --中间件

    session的简介

     session是另一种记录客户状态的机制,与cookie不同的是 session数据保存在服务器中,而不是保存在客户端浏览器中

    session的用途  

    •   session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存在服务器端。
    •   当用户访问站点的其他页面时,可以根据用户的登录状态做出相应的提示,身份验证拦截。
    •   session可以和数据库结合做持久化操作,当服务器挂掉时,不会导致用户信息丢失。、

    session的工作流程

      (例子:商场自助存包)

    1. 当客户端第一次请求服务器时,服务器会为每个客户端创建一个独享的session对象,用于跟踪用户的状态。
    2. 同时,为session对象分配一个唯一标识sessionId。
    3. 为了管理session对象,以sessionId为键,以session对象为值,封装成Map集合。
    4. 响应客户端时,将sessionId以cookie的形式发送给客户端,存放在客户端浏览器的缓存中。
    5. 当客户端再次请求服务器时,会将sessionId以cookie请求头的方式发送给服务器,服务器得到sessionId后,从Map集合中,得到session对象,从而跟踪状态

    session的特点

    •   同源的页面之间可以共享session数据
    •   浏览器关闭时,服务器中保存的session对象也会跟着销毁
    •   在第一次调用request.getSession()方法时,创建出session,
    •   超时:session超过一定时间(默认30分钟,这个时间可设置)没有人使用,则认为超时,干掉这个session。
    •   自杀:也可以明确的调用session的invalidate()方法,手动的杀死session。
    •   意外身亡:或者当服务器非正常关闭时,服务器中的session跟着消亡。

    session的基本使用

    1、安装express-sesssion

    npm install express-session --save-prod

    2、导入

    const session = require('express-session');

    3、配置中间件

    1 // 配置中间件
    2 app.use(session({
    3   secret: 'keyboard cat',
    4   resave: false,
    5   saveUninitialized: true,
    6   // cookie: { secure: true } // https 协议的请求才会传入 cookie
    7   
    8 }))

    4、设置session数据

    1 app.get('/login', (req, res) => {
    2 
    3   req.session.userinfo = 'zhangsan';
    4   res.send('登录成功');
    5 })

    5、获取session数据

    1 app.get('/', (req, res) => {
    2   if (req.session.userinfo) {
    3     res.send('欢迎回来' + req.session.userinfo)
    4   } else {
    5     res.send('未登录')
    6   }
    7 })

     案例:

     1 // 导入express
     2 const express = require('express');
     3 // 导入session中间件
     4 const session = require('express-session');
     5 const app = express();
     6 
     7 app.use(session({secret:'123',resave:false,name:'heihie',
     8 saveUninitialized:true
     9 }))
    10 // 主页
    11 app.get('/',(req,res)=>{
    12     // console.log(req.session)
    13         if(req.session.uname){
    14             res.send('欢迎回来'+req.session.uname)
    15         }else{
    16             res.send('你还未登录')
    17         }
    18 })
    19 // 登录
    20 app.get('/doLogin',(req,res)=>{
    21 //用户名和密码正确正确
    22     if(req.query.username=='zzj'&& req.query.password=="0803"){
    23         // 将用户信息保存到session中
    24         req.session.uname=req.query.username;
    25         // req.session.password=req.query.password;
    26         res.send('登录成功')
    27     }
    28 })
    29 // 启动服务器并监听端口
    30 app.listen(3000,()=>{
    31     console.log('serve running at http://localhost:3000')
    32 })

    session的配置参数

    参数

    说明

    secret

    字符串,作为服务端生成session的签名

    name

    返回客户端的cookie的名称,默认为content.sid,也可以自己设置

    resave

    强制重新保存session,即使它没有变化,默认为true,建议设置成false

    saveUninitialized

    强制将未初始化的session存储,默认是true,建议设置成true

    cookie

    关于cookie配置信息

    rolling

    在每次请求时强行设置cookie,这将重置cookie过期时间,默认值为false

  • 相关阅读:
    刷新或关闭时调用onbeforeunload
    单词换行问题
    PhpStorm提高效率的使用方法及设置
    高质量代码编写
    数组去重
    HMTL5 本地数据库
    Html5 本地存储
    php array(object) 与xml相互转换
    pwnable.kr之leg
    文件上传漏洞及其绕过
  • 原文地址:https://www.cnblogs.com/wszzj/p/12059763.html
Copyright © 2011-2022 走看看