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 });
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);
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);