express學習(三)—— cookie和session

来源:http://www.cnblogs.com/n2meetu/archive/2017/12/04/7979182.html
-Advertisement-
Play Games

express學習(三)—— cookie和session cookie存在瀏覽器中,最大隻能保存4K數據,不安全 session存在伺服器中,不能獨立(先讀取cookie再讀取session),較安全 cookie 工具 發送cookie: 基本的東西先寫好: 讀取cookie 接著,用cooki ...


express學習(三)—— cookie和session

 cookie存在瀏覽器中,最大隻能保存4K數據,不安全

 session存在伺服器中,不能獨立(先讀取cookie再讀取session),較安全

工具

發送cookie:

基本的東西先寫好:

const express = require('express');

var server=express();

// cookie
server.use('/',function(req,res){
   res.cookie('名字', '值', {path: '/aaa/a.html', maxAge: 30*24*3600*1000});  //path指明誰可以訪問,‘/aaa/a.html'表示根目錄下aaa文件夾中的a.html文件;maxAge表示最長保留時間(以毫秒計)
})

server.listen(8080)

讀取cookie

接著,用cookie-parser工具

const express=require('express');
const cookieParser=require('cookie-parser');

var server=express();

//cookie
server.use(cookieParser());

server.use('/', function (req, res){ 
  console.log(req.cookies);

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

server.listen(8080);

執行結果:

但是cookie分為兩種,加密的(有簽名的)、不加密的(沒有簽名的)。

const express=require('express');
const cookieParser=require('cookie-parser');

var server=express();

//cookie
server.use(cookieParser('wesdfw4r34tf'));

server.use('/', function (req, res){
  req.secret = 'wesdfw4r34tf';   //有了上面的’server.use(cookieParser('wesdfw4r34tf'));‘,這裡的req.secret可以不寫。因為cookie會自動傳值給secret
  res.cookie('user', 'blue', {signed: true});

  console.log('簽名cookie:', req.signedCookies,'\n')
  console.log('無簽名cookie:', req.cookies);

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

server.listen(8080);

執行結果:

一定要把簽名的內容告訴cookieParser,如server.use(cookieParser('wesdfw4r34tf'));,否則它不知道解讀誰,就會返回很長一串,如圖所示的結果:

刪除cookie

一條語句就足夠
res.clearCookie('名字');

session

用到一個中間件:cookie-session:
npm install cookie-session --save

const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');

var server = express();


server.use(cookieParser());
server.use(cookieSession({
    name:'my_session',
    keys:['aaa','bbb','ccc'], //數組越長越安全
    maxAge:2*3600*1000  // 保存兩小時
}));

server.use('/',function(req,res){
    if(req.session['count']==null){
        req.session['count']=1;
    }else{
        req.session['count']+=1;        
    }
    console.log(req.session['count'])

    res.send('ok');
})

server.listen(8080);

把密鑰數組增大:

var arr=[];
for(var i=0;i<100000;i++){
    arr.push('sig_'+Math.random());
}


server.use(cookieParser());
server.use(cookieSession({
    name:'my_session',
    keys:arr, //用到上面的數組
    maxAge:2*3600*1000  // 保存兩小時
}));

總結

server.use(cookieParser('簽名字元串'));
server.use(cookieSession({

}));

server.use(function (req, res){
//發送cookie
    res.cookie(名字, 值, {signed: true});

//讀取cookie
    res.cookies['user']
    
//刪除cookie
    res.clearCookie('名字');

//獲取session
    res.session['xxx']
//刪除session
    delete res.session['xxx'];
});

為什麼delete不可以刪除cookie?

因為cookie存在瀏覽器端,而session是存在伺服器端,所以只有session才可以使用delete方法刪除。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 標準盒模型: 因為 ,所以,同樣寬度的內容因為 和`padding box sizing:border box content_box_width = width` 。 2. 彈性盒模型: 彈性佈局相比傳統的塊佈局要簡潔很多,但是實現原理差別挺大的。首先,要想進行彈性佈局,要設置 ,確定彈性容 ...
  • SVG作為時下比較新穎的技術標準,已經建立了很多基於SVG的前端項目。由於SVG在繪製路徑上非常靈活,我們將很多網頁上的元素使用SVG來繪製而成,有各種人物、小圖標、小動畫等等。今天我們收集了10個非常新奇有趣的SVG繪製動畫,這些動畫大部分都是使用SVG結合一定的CSS3特性實現而成,效果讓人大為 ...
  • 以前遇到一個問題,頁面編碼沒問題,後臺返回的編碼也沒問題,但是ajax返回的json就是不講道理的亂碼,查看過http響應頭信息發現請求編碼與頁面編碼不一致 網上搜了好多方法,包括改編碼,重新建頁面都不行! 最後解決方法: 加上了 contentType: "application/x-www-fo ...
  • 4. 前端工程化開發實踐 由於Nodejs 、npm的環境搭建往上很多,這裡就不過多介紹它們了。 這裡我們將更多介紹FIS3、RequireJS 、r.js。 4.1 模塊化開發: 4.1.1 開發目錄結構 左圖為開發目錄結構, 右圖中新增js 目錄、fis-conf.js文件,js 目錄用來存放r ...
  • 介紹ECMAScript各版本的內容,以及使用Babel把ES6及以上的代碼編譯為ES5. ...
  • 參考網址:http://blog.sina.com.cn/s/blog_6961ba9b0102wwye.html 第一次新增時沒有問題,編輯器裡面內容為空,編輯數據時,也是正常,但是第二次點擊新增時會出現編輯時的內容。 分析可能是第二次新增時還是取的上次的實例,即使用CKEDITOR.instan... ...
  • 為了完全理解這個老生常談的東西,查來查去,算是初步知道這是個什麼鬼,怎麼用,為什麼用 閉包: 外部函數定義的內部函數就是閉包。 閉包的作用及好處: 閉包給訪問外部函數定義的內部變數創造了條件。也將關於函數的一切封閉到了函數內部,減少了全局變數,這也是閉包的真實含義。 在理解閉包之前.最好能先理解一下 ...
  • 一、CSS簡介CSS全稱cascading style sheeding,層疊樣式列表。CSS不僅可以靜態地修飾網頁,還可以配合各種腳本語言動態地對網頁各元素進行格式化。二、CSS組成1、選擇器(1)標簽選擇器 (2)ID選擇器 (3)class選擇器 (4)關聯選擇器(層級選擇器,空格)類似spa ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...