Node中Cookie和Session,登录案例

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容