close

cookies

當server想要儲存使用者的某些狀態時,就可以發送cookie給client,cookie是http header裡面其中一個欄位,cookie裡的資料以key/value的形式儲存,cookies通常儲存在client的瀏覽器中,也因此若當cookie並沒有加密時,在傳送的過程中容易被攔截或盜取,故並不鼓勵以cookie儲存一些敏感的資料,除了加密之外,更要設定時間在不需要cookie的時候將它刪除。 每個cookies的檔案最大只能到4k,在使用者瀏覽網站的時候瀏覽器會將cookie儲存在記憶體中,當瀏覽器關閉時,尚未expire的cookies會被存進文字檔中,並等待下次連線使用。

Session

相對於cookies處存在client端,session則是儲存在server端,session也需要cookie的輔助才能產生運作,因為server會傳送存有session id的cookie給client,並在server端建立起這個session id的檔案,在之後client在瀏覽網頁時都會夾帶此session id,如此一來server即可從此session id來辨認每個使用者所儲存的狀態與data。相對於cookies,session多用來儲存敏感的資料,也常常成為攻擊的目標,如session hijacking。

遇到的問題

在處理Auth Serveer遇到的問題。

以google的Oauth2來說,


對於Auth Server來說,基本上就是只有一個session

首先,是使用者點下auth with google的按鈕開始,這個是第一條session

接著google會把使用者導到他們的認證網頁,進行認證後,google會重導使用者到當初註冊時指定的redirect url上,

這個redirect,express還是會判定為剛剛那第一個session

所以,可以在一開始讓使用者帶入資訊以利oauth判斷使用

首先,一開始:

window.location = "https://pillapet.com:3000/auth/google?mac=12345678&name=pilla";
在Google的redirect url則是https://pillapet.com:3000/auth/google/callback

在使用者被redirect的連結就可以使用剛剛的儲存資料

session的定義應該是儲存在cookie裡面的session ID,

做實驗發現,沒有清除cookie的話,同一個電腦的browser開啟server會對到同一個session

但是只要把cookie清除session資料就不見了


(花了我一天多的時間在釐清問題... 肯)

撞牆的原因

一開始,我使用的是

window.location = "https://192.168.100.9:3000/auth/google?mac=12345678&name=pilla";
Google的redirect url則是https://pillapet.com:3000/auth/google/callback

即使windows的dns設定pillapet.com是192.168.100.9,看起來express會認定這是兩個sessions

可能是browser儲存cookie的機制跟url name有關

最後,引句express-session的定義

Session data is not saved in the cookie itself, just the session ID. Session data is stored server-side.

參考資料

http://andikan.github.io/blog/2012/10/03/cookie-and-session/
https://stormpath.com/blog/everything-you-ever-wanted-to-know-about-node-dot-js-sessions/
http://blog.modulus.io/nodejs-and-express-sessions
https://www.airpair.com/express/posts/expressjs-and-passportjs-sessions-deep-dive
arrow
arrow
    文章標籤
    node.js
    全站熱搜

    Perry Wu 發表在 痞客邦 留言(0) 人氣()