2017-07-31 109 views
0

我正在嘗試使用快速會話跟蹤arcade.ly上的用戶會話。我沒有指定genid的值,因爲我很高興(現在)堅持使用默認ID生成。問題是沒有爲我的會話生成ID。快速會話未在我的會話中設置ID

下面是我在我的服務器上執行字符串化通過捕捉req.session一個例子:

info: Session info: {"cookie":{"originalMaxAge":31535989265,"expires":"2018-07-31T21:30:05.827Z","secure":false,"httpOnly":true,"path":"/","sameSite":"lax"}} 

正如你所看到的,這一切都從沒有標識的分開好。我絕對需要的ID,因爲我希望能夠如用戶開始遊戲,結束遊戲,他們的最終得分,與該會話的某些信息進行關聯,我想不管他們是否登錄到其關聯或不。

如果他們選擇稍後登錄記錄他們的分數,然後我可以與他們的會話登錄相關聯,而是迫使他們登錄的前期吸的用戶體驗。

我的代碼看起來是這樣的:在腦海

let cookieExpiry = new Date(); 
cookieExpiry.setFullYear(cookieExpiry.getFullYear() + 1); 
let sessionOptions = { 
    cookie: { 
     path: '/', 
     httpOnly: true, 
     secure: false, 
     maxAge: null, 
     expires: cookieExpiry, 
     sameSite: 'lax', 
    }, 
    name: 'arcadely.sid', 
    resave: false, 
    saveUninitialized: false, 
    secret: sessionSecret.secret 
}; 

// In production we want to use secure cookies 
if (!debugging.isDebugging()) { 
    app.set('trust proxy', 1); // Required for secure cookie to work behind Cloudflare 
    sessionOptions.cookie.secure = true; 
    sessionOptions.proxy = true; 
} 

app.use(session(sessionOptions)); 
app.use(cookieParser()); 
app.use(bodyParser.json()); 
// app.use(passport.initialize()); 
// app.use(passport.session()); 

// Dynamic content 
app.get('/', homepages.serveOrRedirect); 

app.get(/^\/star-castle\/?$/, (req, res) => { res.redirect(301, '/games/starcastle/'); }); 
app.get(/^\/games\/asteroids\/?$/, games.loadAsteroids); 
app.get(/^\/games\/space-invaders\/?$/, games.loadSpaceInvaders); 
app.get(/^\/games\/starcastle\/?$/, games.loadStarCastle); 

軸承是我看這個在我的網站的調試版本,爲什麼我不能在會話對象中看到任何會話ID?如果它沒有存儲在那裏存儲在哪裏,我如何得到它?

(護照的原因是因爲最終我想插入護照登錄,但現在,我已經評論它只是爲了從查詢中消除它,因爲它是。此外,sessionSecret.secret只是一個大的隨機字符串存儲在另一個文件爲方便。)

任何幫助非常感謝。

非常感謝,

巴特

+0

這聽起來像你可能需要'uuid'。試着在npmjs.org上查找'uuidv4'。 YOu可能需要包裝並執行'sessionID = uuidv4()'並根據需要進行使用。我不確定這是否是您需要的。 – agm1984

+0

謝謝 - 我必須承認,我很想嘗試提供自定義'genid'實現,使用'uuid'或類似的東西,只是爲了檢查是否實際上是問題或沒有。根據文檔,理論上它不應該是這樣,但是文檔總是有點過時,對吧?早上的一個,methinks。 –

回答

0

事實證明,問題是我是一個白癡。重新閱讀文檔https://github.com/expressjs/session表明req.session.id實際上是req.sessionID的別名。如果我查詢後者,那麼我得到我想要的會話ID,我們都很好。