2012-04-07 81 views
2

我有一個Nodejs和連接問題,並且它沒有在請求之間保留會話變量。現在我不想使用數據庫來存儲我的會話。我只想使用MemoryStore。NodeJS會話變量不會粘住

我的服務器:

var server = connect() 
.use(connect.cookieParser('justmeknowsthis')) 
.use(connect.session({ cookie: { maxAge: config.data.sessionTimeout /* 1800000 */ }})) 
.use(auth.authorize) 
.use(routes.routes) 
.use(function(req, res, next) { 
    utils.data.returnJsonError(res, 404, true, { 
     message: 'Call not supported' 
    }); 
}); 

我設置這樣一個會話變量:

req.session.auth = true; 
req.session.username = data.username; 

發現有關該問題的一些信息後,我已經注意到,它可能與做時區,因爲它開始工作,如果我只是增加超時。從我過去使用ASP.Net的經驗來看,我從來沒有遇到過這個問題,因爲它似乎並不關心這個問題。

我該如何解決這個問題?

回答

1

好的。所以終於想出瞭如何去做。在閱讀了很多關於我在UTC沒有運行我的服務器的愚蠢信息之後,我決定嘗試一下。我在Ubuntu上,這裏是讓cookies正常工作的解決方案。

運行:

sudo dpkg-reconfigure tzdata 

從「地理區域」 選擇UTC,然後按下列表中選擇「等」輸入

UPDATE 我發現我的服務器時間漂移相當嚴重(虛擬機器),所以我還必須使用ntp-daemon來讓它保持適當的時間。設置如下:

sudo apt-get install ntp 

您需要停止ntp-daemon以便能夠在第一次手動更新它。您也可以重新啓動服務器,但它是Linux,因此您不必這樣做。運行下面的停止守護進程:手動

sudo /etc/init.d/ntp stop 

更新服務器時間(用接近你http://www.pool.ntp.org/en/服務器):

ntpdate ntp.ubuntu.com pool.ntp.org 

只是再次重新啓動守護程序:

sudo /etc/init.d/ntp start 

還更新文件/etc/ntp.conf幷包含您的本地時間服務器。

UPDATE AGAIN 跑完一天後,我發現時間還沒有關閉。我現在已經關閉了VM機器的UTC選項。這不幸的是還需要重新啓動。

+0

很高興你把它分類。很高興知道需要UTC才能使Cookie生效。 – 2012-04-13 14:05:03