nodejs-5.6 cookie-parser


cookie-parser

官網:https://github.com/expressjs/cookie-parser

一、概念: cookie ==> 小甜餅 , parser ==> 解析器,  cookie-parser 就是用來解析 cookie 的. 

二、cookie存儲位置:cookie是存儲在客戶端瀏覽器中.每個瀏覽器的 cookie 都是獨立的, 不能共享.

cookie 其實就是請求頭中的一個數據.

作用: 方便向服務器發送數據,當服務器向客戶端在響應頭寫入cookie,下一次發送請求會把cookie跟請求頭一起發送給服務器。

(所以如果沒有cookie-parser包,我們也可以通過req.headers在請求頭中獲取cookie)

cookie使用場景:通常用於服務器通過cookie識別用戶的身份。

請求頭: GET /admin HTTP/1.1 Host: localhost User-agent: firefox chrome ie iphone ios andoid referer: localhost/login
content-type: text/htm;charset==utf-8
cookie: name=admin .......

 

三、使用:

1.安裝 cnpm install cookie-parser --save

2. 引入並設置:
  var cookieParser = require('cookie-parser');
  app.use(cookieParser());
2.1 設置cookie : 

  res.cookie('name','xiaohigh')
  res.cookie('name','xiaohigh', {maxAge: 600000})

★ `res.cookie('name','xiaohigh')`    如果不設置 cookie 的生命周期, 則cookie 會隨着瀏覽器的關閉而過期.

 

  res.cookie('haha',  'name1=value1&name2=value2',  {maxAge:10*1000,  path:'/',  httpOnly:true });
  • name=value:鍵值對,可以設置要保存的 Key/Value,注意這里的 name 不能和其他屬性項的名字一樣
  • Expires: 過期時間(秒),在設置的某個時間點后該 Cookie 就會失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT
  • maxAge: 最大失效時間(毫秒),設置在多少后失效
  • secure: 當 secure 值為 true 時,cookie 在 HTTP 中是無效,在 HTTPS 中才有效
  • Path: 表示 cookie 影響到的路,如 path=/。如果路徑不能匹配時,瀏覽器則不發送這個Cookie
  • httpOnly:是微軟對COOKIE做的擴展。如果在COOKIE中設置了“httpOnly”屬性,則通過程序(JS腳本、applet等)將無法讀取到COOKIE信息,防止XSS攻擊產生

 

2.2 讀取cookie :  req.cookies.name
2.3 清除cookie :  res.clearCookie('name')

 

四、實例鏈接栗子

1.設置cookie

var express=require('express');
var app=express();

var cookieParser=require('cookie-parser');
app.use(cookieParser());

app.get('/setCookie',function(req,res){
  res.cookie('name','slig');

  res.end('ok');
});

app.listen(80);

 

第一次請求:響應頭中 set-Cookie:name=slig;path=/  此時已把cookie寫入瀏覽器客戶端。 請求頭中沒有cookie

 

第二次請求(再次刷新頁面):響應頭中 set-Cookie:name=slig;path=/ ; 請求頭中有上一次的cookie: Cookie:name=slig

 

2.獲取cookie、清除cookie

var express = require('express');
var app = express();

//引入cookie-parser
var cookieParser = require('cookie-parser');

//設置
app.use(cookieParser());

//模板
app.set('view engine', 'ejs');
app.set('views','views');

//路由
app.get('/setCookie', function(req,res){
  //寫入cookie
  res.cookie('name','slig');//響應頭中
  res.end('ok');
});

//獲取cookie
app.get('/getCookie', function(req,res){
  //獲取
  console.log(req.cookies.name);
  res.end('獲取cookie')
});

//刪除cookie
app.get('/delCookie', function(req, res){
  res.clearCookie('name');
  res.end('clear cookie');
});

// 
app.listen(8080);
app.js

 

 3. 模擬服務器通過cookie識別用戶的身份栗子:

模擬需求:
// 沒有登陸可以訪問   
//  /home 首頁   /list  列表頁

// 必須之后之后才可以訪問 
//  /admin 個人中心頁

//  登陸頁面 
//  GET /login    
// 實現登陸  admin  admin 為后台管理員賬號密碼
//  POST /login

 

var express = require('express');
var app = express();
//引入cookie-parser
var cookieParser = require('cookie-parser');
var formidable = require('formidable');
//設置
app.use(cookieParser());
//模板
app.set('view engine', 'ejs');
app.set('views','views');

// 沒有登陸可以訪問   
//  /home   /list 

// 必須之后之后才可以訪問 
//  /admin

//  登陸頁面 
//  GET /login    
// 實現登陸  (賬號:admin  密碼:admin) 為后台管理員賬號密碼
// //檢測用戶是否登陸  cookie.id 有值  cookie.admin = 1
//  POST /login

app.get('/home',function(req,res){
  res.setHeader('content-type','text/html;charset=utf-8');
  res.end('網站首頁!!!');
});

app.get('/list',function(req,res){
  res.setHeader('content-type','text/html;charset=utf-8');
  res.end('網站列表頁!!!');
});

//網站后台
app.get('/admin',function(req,res){
  //檢測用戶是否登陸  cookie.id 有值  cookie.admin = 1
  if(req.cookies.id && req.cookies.admin == 1){
    res.setHeader('content-type','text/html;charset=utf-8');
    res.end('網站后台!!!');
  }else{
    res.redirect('/login');
  }
});

//登陸頁面
app.get('/login', function(req,res){
  //顯示表單
  res.render('login');
});

//登陸操作
app.post('/login', function(req,res){
  //獲取參數
  var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
      //fields 對象
      if(fields.username == 'admin' && fields.password == 'admin'){
        //參數正確  寫入cookie
        res.setHeader('content-type','text/html;charset=utf-8');
        res.cookie('id', 100, {maxAge: 600000});
        res.cookie('admin', 1, {maxAge: 600000});
        res.end('登陸成功');
      }else{
        //參數錯誤 跳轉到 登陸頁面
        res.redirect('/login');
      }
    });
});

app.listen(80);
app2.js

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM