• Express全系列教程之(八):session的基本使用


    一、关于session

    session是另一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器当中;
    当客户端访问服务器时,服务器会生成一个session对象,对象中保存的是key:value值,同时服务器会将key传回给客户端的cookie当中;当用户第二次访问服务器时,就会把cookie当中的key传回到服务器中,最后服务器会吧value值返回给客户端。
    因此上面的key则是全局唯一的标识,客户端和服务端依靠这个全局唯一的标识来访问会话信息数据。

    二、设置session

    我们使用express-session模块来设置session

      1.安装express-session

    1

    cnpm install express-session --save

      2.引入express-session模块

    1

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

      3.设置session

    1

    session(options);

      如下列代码:

    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

    const express=require("express");

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

    var app=express();

    //配置中间件

    app.use(session({

        secret: "keyboard cat",

         resave: false,

         saveUninitialized: true,

         cookie: ('name''value',{maxAge:  5*60*1000,secure: false})

    }));

    app.use('/login',function(req,res){

        //设置session

        req.session.userinfo='张三';

        res.send("登陆成功!");

    });

    app.use('/',function(req,res){

        //获取session

        if(req.session.userinfo){

            res.send("hello "+req.session.userinfo+",welcome");

        }else{

            res.send("未登陆");

        }

    });

    app.listen(8080);

      在session(option)中对session进行设置,它的主要参数是:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    1. name - cookie的名字(原属性名为 key)。(默认:’connect.sid’)

    2. store - session存储实例

    3. secret - 用它来对session cookie签名,防止篡改

    4. cookie - session cookie设置 (默认:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })

    5. genid - 生成新session ID的函数 (默认使用uid2库)

    6. rolling - 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false

    7. resave - 强制保存session即使它并没有变化 (默认: true, 建议设为:false

    8. proxy - 当设置了secure cookies(通过”x-forwarded-proto” header )时信任反向代理。当设定为true时,

    ”x-forwarded-proto” header 将被使用。当设定为false时,所有headers将被忽略。当该属性没有被设定时,将使用Express的trust proxy。

    9. saveUninitialized - 强制将未初始化的session存储。当新建了一个session且未设定属性或值时,它就处于未初始化状态。在设定一个cookie前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。(默认:true

    10. unset - 控制req.session是否取消(例如通过 delete,或者将它的值设置为null)。这可以使session保持存储状态但忽略修改或删除的请求(默认:keep)

     

    三、session的常用方法

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    req.session.username="张三"

    //获取session

    req.session.username

    //重新设置cookie的过期时间

    req.session.cookie.maxAge=1000;

    //销毁session

    req.session.destroy(function(err){

         

    })

      以下演示通过销毁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

    34

    35

    36

    37

    38

    39

    const express=require("express");

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

    var app=express();

    //配置中间件

    app.use(session({

        secret: "keyboard cat",

         resave: false,

         saveUninitialized: true,

         cookie: ('name''value',{ maxAge:  5*60*1000,

                                    secure: false,

                                    name: "seName",

                                    resave: false})

    }));

    app.use('/login',function(req,res){

        //设置session

        req.session.userinfo='张三';

        res.send("登陆成功!");

    });

    app.use('/loginOut',function(req,res){

        //注销session

        req.session.destroy(function(err){

            res.send("退出登录!"+err);

        });

    });

    app.use('/',function(req,res){

        //获取session

        if(req.session.userinfo){

            res.send("hello "+req.session.userinfo+",welcome to index");

        }else{

            res.send("未登陆");

        }

    });

    app.listen(8080);

      当我们进入到主页时,未显示任何信息,进入login路由后,自动设置session,这是回到主页则显示session信息,之后进入loginOut路由已注销session信息,再回到首页显示为登陆。

  • 相关阅读:
    【Little Demo】左右按钮tab选项卡双切换
    【Little Demo】从简单的Tab标签到Tab图片切换
    前端工程师说明(仅以自勉)
    CSS 布局整理
    【Javascript Demo】图片瀑布流实现
    【jQuery Demo】图片瀑布流实现
    【CSS Demo】纯 CSS 打造 Flow-Steps 导航
    【CSS Demo】网站页面变灰
    gradlew命令
    Fragment中不能使用自定义带参构造函数
  • 原文地址:https://www.cnblogs.com/wjlbk/p/12633314.html
Copyright © 2020-2023  润新知