美文网首页
Node中Cookie和Session,登录案例

Node中Cookie和Session,登录案例

作者: 不要和我名字一样 | 来源:发表于2017-07-25 22:18 被阅读1014次

    1、Cookie

    HTTP是无状态协议。简单地说,当你浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到,这是同一个浏览器在访问同一个网站。每一次的访问,都是没有任何关系的。
    Cookie是一个很简单的想法:当访问一个页面的时候,服务器在下行HTTP报文中,命令浏览器存储一个字符串;浏览器再访问同一个域的时候,将把这个字符串携带到上行HTTP请求中。
    第一次访问一个服务器,不可能携带cookie。 必须是服务器得到这次请求,在下行响应报头中,携带cookie信息,此后每一次浏览器往这个服务器发出的请求,都会携带这个cookie。

    特点

    ● cookie是不加密的,用户可以自由看到;
    ● 用户可以删除cookie,或者禁用它
    ● cookie可以被篡改
    ● cookie可以用于攻击
    ● cookie存储量很小。未来实际上要被localStorage替代,但是后者IE9兼容。

    cookie使用:要引入var cookieParser = require('cookie-parser');

    app.use(cookieParser());
    app.get('/',function (req,res) {
        //设置cookie
        res.cookie('xihao','zhaoliying',{
            //maxAge在express中以毫秒为单位;
            maxAge:100000,
            httpOnly:true
        })
        res.send(req.cookies)//获取cookie
    });
    

    2、session

    • Session不是一个天生就有的技术,而是依赖cookie。当一个浏览器禁用cookie的时候,登录效果消失;或者用户清除了这个cookie,登录也消失;
    • session比cookie不一样在哪里呢?session下发的是乱码,并且服务器自己缓存一些东西;下次浏览器带着乱码上来,此时与缓存进行比较,看看是谁?
    • nodejs中的session用中间件:express-session

    cookie和session的区别:

    • cookie是明码;session是乱码;
    • cookie存在客户端浏览器; session存在服务器;
    • cookie内存小;session内存大;

    3、使用session实现登录

    /**
     * Created by 黄森 on 2017/7/25.
     */
    var express = require('express');
    var app = express();
    var session = require('express-session');
    var db = require('./model/db.js');
    
    //使用中间件session
    app.use(session({
        secret: 'keyboard cat',
        resave: false,
        saveUninitialized: true
    }));
    //设置模板引擎
    app.set("view engine", "ejs");
    //加载登录页面
    app.get('/login',function (req,res) {
        res.render('login');
    });
    //当你登录成功后访问/index时就会显示你已经登录
    app.get('/index',function (req,res) {
       if(req.session.login==1){
           res.send("你好,欢迎"+req.session.username);
       }else {
           res.send("你还没有登录")
       }
    });
    
    app.get('/checkLogin',function (req,res) {
        var username = req.query.username;
        var password = req.query.password;
        db.find('user',{"username":username},function (err,result) {
            if(result.length==0){
                res.send("用户名错误,没有这个用户")
            }
            else if(result[0].password==password){
                req.session.login='1',
                req.session.username = result[0].username;
                res.send("成功登陆!你是" + result[0].username);
            }else {
                res.send('密码错误');
            }
        })
    });
    app.listen(3000);
    
    

    登录页面login.ejs

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>登录</title>
    </head>
    <body>
    <form action="/checkLogin" method="get">
        <p>用户名:<input type="text" name="username"></p>
        <p>密  码:<input type="text" name="password"></p>
        <p><input type="submit"></p>
    </form>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:Node中Cookie和Session,登录案例

          本文链接:https://www.haomeiwen.com/subject/iwrgkxtx.html