2015-11-08 81 views
1

我有一個AngularJS客戶端使用$http()函數將POST表單數據發送到Express服務器。我希望服務器在持有用戶電子郵件地址的客戶端中設置一個cookie。這就是我存儲的全部內容,所以我不需要更強大的服務器端會話。我只是使用cookie-session模塊。快速Cookie會話不會持續POST請求

問題: Cookie不在客戶端持久化。隨後來自同一個客戶端的請求顯示一個空的會話變量。

我已經看到了example here,並且在設置cookie後使用req.session.save(),但它仍然不起作用。

Server代碼:

// server.js 

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var cookieParser = require('cookie-parser'); 
var cookieSession = require('cookie-session') 
var methodOverride = require('method-override'); 

// Configuration 
app.use(bodyParser.urlencoded({'extended':'true'})); 
app.use(bodyParser.json()); 
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); 
app.use(methodOverride('X-HTTP-Method-Override')); 

var express = require('express'); 
var app = express(); 

// Cookies 
app.use(cookieParser()); 

app.use(cookieSession({ 
    name: 'session', // what should this name match? 
    resave: true, 
    saveUninitialized: true, 
    keys: ['key1', 'key2'] // what do these values need to match? 
})); 

app.use(function(req, res, next) { 
    // Create a cookie. 
    console.log("Session user [before set]: %j", req.session); 
    req.session.mycookie = "sample data"; // simplified example for illustration 
    console.log("Session user [after set]: %j", req.session); 
    // Save session cookie 
    req.session.save(); 
}); 

app.listen(3000); 

來自同一個客戶的每請求給輸出:

Session user [before set]: {} 
Session user [after set]: {"mycookie":"sample data"} 

由客戶端的後續測試表明cookie不會持久。我甚至使用Firefox的「查看Cookies」插件來檢查是否創建了cookie,而不是。

1.爲什麼我的cookie不能持久?我是Express的新手,所以我可能會錯過一些明顯的東西。

2.我是否使用正確的參數來創建cookieSession?我不知道keysname應該是什麼。 cookie-session documentation對此很模糊,我在其他地方找不到更好的文檔。

回答

0

原來的解決方案很簡單!我現在意識到我需要包括在瀏覽器的初始請求到服務器的端口號(我沒有包括在JavaScript代碼的端口號。)

即使沒有端口號,瀏覽器可以得到初始請求,因爲同一臺計算機上的另一臺Web服務器(而不是我的Express服務器)正在爲請求提供服務。

只需將端口號添加到瀏覽器的地址欄即可。當然,那麼我需要在服務器上添加另一個Express路由來處理站點的默認頁面。在此之後,Cookie按預期工作。

希望這個答案可以幫助其他Express新手。