Connect和Session(会话)

本文详细介绍了一个基于Node.js的网站如何实现用户登录、会话管理和安全验证的过程。通过使用connect中间件,实现了用户身份验证、会话状态保持以及安全的用户认证流程。文章深入解析了session中间件的配置与应用,包括如何设置会话密钥、处理用户登录请求及注销功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

user.json

{
    "tobi":{
        "password":"ferret",
        "name":"Tobi Hellowaychuk"
    }
}

package.json

{
    "name": "mywebsite",
    "version": "0.1.1",
    "dependencies": {
        "connect":"1.8.7"
    }
}

session.js

var connect=require("connect");
var users=require("./users");
var server=connect(
    connect.logger("dev"),
    connect.bodyParser(),
    connect.cookieParser(),
    connect.session({secret:"my app serect"}),
    function(req,res,next){
        if('/'==req.url&&req.session.logged_in){
            res.writeHead(200,{'Content-Type':'text/html'});
            res.end(
                'Welcome back,<b>'+req.session.name+'</b>'+
                '<a href="/logout">Logout</a>'
            );
        }else{
            next();
        }
    },
    function(req,res,next){
        if('/'==req.url&&"GET"==req.method){
            res.writeHead(200,{'Content-Type':'text/html'});
            res.end([
                '<form action="/login" method="POST">',
                '<fiedset>',
                  '<legend>Please log in</legend>',
                  '<p>User:<input type="text" name="user" multiple="multiple"></p>',
                  '<p>Passwrod:<input type="password" name="password" multiple="multiple"></p>',
                  '<button>Submit</button>',
                '</fiedset>',
                '</form>'
            ].join(''));
        }else{
            next();
        }
    },
    function(req,res,next){
        if('/login'==req.url&&'POST'==req.method){
            res.writeHead(200,{'Content-Type':'text/html'});
            if(!users[req.body.user]||req.body.password!=users[req.body.user].password){
                res.end("<h1>Wrong Users</h1>");
            }else{
                console.log("----"+req.body.user+"----"+req.body.password);
                req.session.logged_in=true;
                req.session.name=users[req.body.user].name;
                res.end('<h1>Authenticated!!!!</h1>')
            }
        }
    },
    function(req,res,next){
        if('/logout'==req.url){
            req.session.logged_in=false;
            res.writeHead(200);
            res.end("Logged out!");
        }else{
            next();
        }
    }
);
server.listen(3000);

1.因为session中间件需要操作cookie中间件,所以也要加上

2.处于安全考虑,我们要在session中间件加上serect

3.网页的url随着form的action和a标签的url而变化

4.引入了session中间件就会有req.session,我们将用户名和密码保存在参数里

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值