为什么会话不会在rails中重复

时间:2017-07-17 03:29:05

标签: ruby-on-rails session cookies

我在rails中学习会话和cookie,我对在rails中存储会话感到困惑。 当用户(名为U1)登录到rails服务器(名为A)时,A将创建会话并将其存储在某处:

session[:user_id] = user.id

如上所述,我将认为用户U1的会话将存储在会话数组中,索引 user_id 。 但是当其他用户(名为U2)登录到服务器A时,也会调用上述命令,索引也是 user_id 。那么为什么U1的索引 user_id 不会替换为U2的 user_id (因为用户U1和U2都使用共享的会话数组)

2 个答案:

答案 0 :(得分:1)

为每个用户创建了单独的session。这是由服务器完成的,服务器跟踪每个用户的会话。

答案 1 :(得分: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.您的应用程序从您的cookie中获取会话ID,并在会话表中查找其记录。

4.然后,它将current_user_id从该记录的数据属性中返回。