2017-07-17 50 views
1

我正在學習會話和cookie在軌道中,我很困惑會話存儲在rails中。 當用戶(名爲U1)登錄到一個軌道斷絕(命名爲A),A將創建一個會話,它存儲在某處:爲什麼會話不會在rails中重複

session[:user_id] = user.id 

正如上面的命令,我會思考用戶U1的那屆會存儲到會話數組中並且具有索引user_id。 但是當其他用戶(名爲U2)登錄到服務器A時,上述命令也會被調用,並且索引爲user_id。那麼,爲什麼索引user_id說明U1的不更換USER_ID U2的(因爲兩個用戶U1和U2使用共享會話陣列)

+0

如果你使用不同的瀏覽器實例(窗口),cookies不會相互共享,所以你的會話密鑰是不同的。 –

回答

0

如何使用:

1.當您撥打session[:current_user_id] = 1在您的應用程序,以及會議不存在:

2.Rails會在你的會話表中創建一個新的記錄與隨機會話ID(例如,09497d46978bf6f32265fefb5cc52264)。

3.它將在該記錄的數據屬性中存儲{current_user_id: 1} (Base64-encoded)

4.然後它會使用Set-Cookie將生成的session ID, 09497d46978bf6f32265fefb5cc52264返回給瀏覽器。

下一次你請求一個頁面,

1.瀏覽器發送相同的cookie來您的應用程序,使用的Cookie:頭。

這樣的:

Cookie: _my_app_session=09497d46978bf6f32265fefb5cc52264; 
path=/; HttpOnly 

2.當您撥打session[:current_user_id]

3.您的應用程序抓取會話ID從你的Cookie,並發現其在會話表記錄。

4.然後,它從該記錄的數據屬性中返回current_user_id。

+0

我不使用上面的ActiveRecord會話,我正在學習Rails教程的書。 – Hung

+0

@洪好吧,這只是你的知識。 –

+0

@洪如果你對我的答案滿意,然後使其正確 –

1

沒有爲每個用戶創建一個單獨的session。這由服務器完成,服務器跟蹤每個用戶的會話。

+0

「每個用戶」在這裏是指「每個瀏覽器」或「每個IP地址」?如果我打開2個窗口瀏覽器,那麼它可以假設2個用戶? – Hung