2012-05-06 71 views
9

我想我明白餅乾是如何工作的,但我想不會,因爲我被困在以下方面:如何訪問由node.js Express創建的客戶端cookie(帶有會話ID)?

我無法顯示帶的document.cookie一個cookie,用警報(document.cookie中)測試;在我的代碼中。

我玩弄節點,並在下面的代碼片段我的服務器上(與快遞一切工程和服務的頁面):

var express = require('express') 
, util = require('util') 
, MemoryStore = express.session.MemoryStore 
, app = express.createServer() 
, sessionStore = new MemoryStore(); 

app.configure(function() { 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(express.logger()); 
    app.use(express.cookieParser()); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.session({ 
      store: sessionStore, 
      secret: 'BBQ12345AHHH', 
      key: 'cookie.sid' })); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
    }); 

我的服務器上,我看到一個cookie被髮送時,我命中index.ejs。 Chrome還會在index.ejs的標頭中顯示cookie。但是,當我在index.ejs頁面添加alert(document.cookie)時,警報爲空。我究竟做錯了什麼?

謝謝

回答

9

的連接會話cookie默認爲httpOnly的Chrome瀏覽方面,即客戶端JavaScript無法訪問Cookie。

會話cookie不需要由客戶端javascript讀取,除非它是由惡意XSS腳本所以它是一切都很好。

如果你想雖然超越它,嘗試:

app.use(express.session({ 
    store: sessionStore, 
    secret: 'BBQ12345AHHH', 
    cookie: {httpOnly: false}, 
    key: 'cookie.sid' }   
)) 

來源http://www.senchalabs.org/connect/session.html#session

+0

因此如何能在應用程序中籤署的餅乾後節點訪問? – vsync

+1

@vsync在谷歌搜索「簽名cookie」的第一個結果''req.signedCookies ['name']' – Esailija

+0

10x。最好所有的信息都在這裏,在一個地方,而不是邪惡的谷歌:)但是當我讀取簽名加密的cookie時,服務器是否知道如何使用相同的密鑰解密它? – vsync