NodeJs中的cookie孽文、Session-cookie

一厌衔、Cookie原理

// cookie.js
const http = require("http") 
http.createServer((req, res) => { 
    if(req.url === '/favicon.ico'){ 
        res.end('') 
        return 
    } 
    // 觀察cookie存在 
    console.log('cookie:', req.headers.cookie) 
    // 設(shè)置cookie 
    res.setHeader('Set-Cookie', 'cookie1=abc;') 
    res.end('hello cookie!!') 
}).listen(3000)

首次請(qǐng)求服務(wù)端會(huì)在響應(yīng)的headers里邊種下Cookie璧帝,再次請(qǐng)求服務(wù),瀏覽器就會(huì)帶上Cookie,
然后這樣會(huì)存在一些問題富寿,首先Cookie不能存太大睬隶,設(shè)置在瀏覽器端可以看到可以被修改,不是那么的安全作喘。

二理疙、Session-cookie原理

正因?yàn)?code>Cookie的弊端,所以我們能不能把重要信息保存在服務(wù)器泞坦,Cookie中值保留簡(jiǎn)單的一個(gè)ID將來用于去服務(wù)器獲取對(duì)應(yīng)信息

const http = require('http')
const session = {}
http.createServer((req, res) => {
    const sessionKey = 'sid'

    if (req.url === '/favicon.ico') {
        return
    } else {
        const cookie = req.headers.cookie
        if (cookie && cookie.indexOf(sessionKey) > -1) {
            res.end('Come Back')
            console.log('cookie:', req.headers.cookie)
            // 簡(jiǎn)略寫法未必具有通用性
            const pattern = new RegExp(`${sessionKey}=([^;]+);?\s*`)
            const sid = pattern.exec(cookie)[1]
            console.log('session:', sid, session, session[sid])
        } else {
            const sid = (Math.random() * 9999999).toFixed()
            res.setHeader('Set-Cookie', `${sessionKey}=${sid}`)
            session[sid] = { name: 'laowang' }
            res.end('hello cookie')
        }
    }

}).listen(3000)

那么接下來看下Koa中如何使用Session-cookie模式

三、Koa中如何使用Session-cookie

// index.js
const koa = require('koa')
const app = new koa()
const session = require('koa-session')
// 簽名key keys作用 用來對(duì)cookie進(jìn)行簽名
app.keys = ['some secret'];
// 配置項(xiàng)
const SESS_CONFIG = {
    key: 'ygc:sess', // cookie鍵名
    maxAge: 86400000, // 有效期砖顷,默認(rèn)一天
    httpOnly: true, // 僅服務(wù)器修改
    signed: true, // 簽名cookie
};
// 注冊(cè)
app.use(session(SESS_CONFIG, app));
// 測(cè)試
app.use(ctx => {
    if (ctx.path === '/favicon.ico') return;
    // 獲取
    let n = ctx.session.count || 0; 
    // 設(shè)置 
    ctx.session.count = ++n; 
    ctx.body = '第' + n + '次訪問'; 
}); 
app.listen(3000)

當(dāng)httpOnly設(shè)置為true的時(shí)候cookieygc:sess在瀏覽器中是無法讀取的贰锁;
當(dāng)signed設(shè)置為true的時(shí)候,會(huì)成對(duì)的出現(xiàn)ygc:sess.sig滤蝠,它是app.keysygc:sess哈希的結(jié)果豌熄;防止被篡改;
哈希會(huì)滿足幾個(gè)條件 把不定長(zhǎng)轉(zhuǎn)換成定長(zhǎng)物咳,摘要锣险,雪崩效應(yīng);

以上session放在本地览闰,多個(gè)實(shí)例不能共享

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芯肤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子压鉴,更是在濱河造成了極大的恐慌崖咨,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件油吭,死亡現(xiàn)場(chǎng)離奇詭異击蹲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)婉宰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門歌豺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人心包,你說我怎么就攤上這事类咧。” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵轮听,是天一觀的道長(zhǎng)骗露。 經(jīng)常有香客問我,道長(zhǎng)血巍,這世上最難降的妖魔是什么萧锉? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮述寡,結(jié)果婚禮上柿隙,老公的妹妹穿的比我還像新娘。我一直安慰自己鲫凶,他們只是感情好禀崖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著螟炫,像睡著了一般波附。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昼钻,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天掸屡,我揣著相機(jī)與錄音,去河邊找鬼然评。 笑死仅财,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碗淌。 我是一名探鬼主播盏求,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼亿眠!你這毒婦竟也來了碎罚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤缕探,失蹤者是張志新(化名)和其女友劉穎魂莫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爹耗,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耙考,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潭兽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倦始。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖山卦,靈堂內(nèi)的尸體忽然破棺而出鞋邑,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布枚碗,位于F島的核電站逾一,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肮雨。R本人自食惡果不足惜遵堵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怨规。 院中可真熱鬧陌宿,春花似錦、人聲如沸波丰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掰烟。三九已至爽蝴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間媚赖,已是汗流浹背霜瘪。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惧磺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓捻撑,卻偏偏與公主長(zhǎng)得像磨隘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子顾患,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容