我在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都使用共享的会话数组)
答案 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从该记录的数据属性中返回。