nodejs-5.6 cookie-parser

cookie-parserhtml

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

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

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

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

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

(因此若是沒有cookie-parser包,咱們也能夠經過req.headers在請求頭中獲取cookie)npm

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 .......

 

3、使用:服務器

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

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')

 

4、實例連接栗子

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
相關文章
相關標籤/搜索