2013-08-06 53 views

回答

13

目前還不清楚你想達到什麼目標,但是......會話ID只是一個ID!您可以根據需要生成它。除唯一性外,沒有其他要求。儘管如此,確保它是安全的。例如,這功能可能是你的會話ID生成器:

var crypto = require('crypto'); 

var generate_key = function() { 
    var sha = crypto.createHash('sha256'); 
    sha.update(Math.random().toString()); 
    return sha.digest('hex'); 
}; 

你叫generate_key()你檢查它是否存在於數據庫中。如果它是你再次打電話等等。

+0

您認爲使用加密函數進行session id生成是不錯的選擇嗎?密碼在計算中佔用很多時間。我寧願建議使用uuid函數,通過提供一些種子數據(mac地址)來解決分佈式環境中的衝突。 http://blog.tompawlak.org/generate-unique-identifier-nodejs-javascript – Ashish

+4

不幸的是,除了獨特性之外還有其他一些要求,如不可預測性和具有足夠的隨機性。 [你應該使用Node.js加密模塊。 'Math.Random'從當前時間開始](http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript),因此它是可預測的,攻擊者可以用它來預測用戶的會話ID。 – SilverlightFox

+0

' const crypto = require('crypto'); 功能generateSessionID(回調){ crypto.randomBytes(256,函數(ERR,BUF){ 如果(ERR){ 回調(ERR); 回報; } 變種SHA = crypto.createHash('SHA256 '); sha.update(buf); callback(null,sha.digest('hex')); }); } module.exports = generateSessionID; ' 對不起,似乎無法得到這種格式很好的評論。 插入您的數據存儲並檢查它是否已存在。 如果產生錯誤,則記錄並拋出該錯誤。 不確定它的良好實踐或類似的東西:S –