gpt4 book ai didi

ruby-on-rails - 在我开始在线阅读有关它们的信息之前,这些 session 对我来说很有意义

转载 作者:行者123 更新时间:2023-12-04 21:16:45 26 4
gpt4 key购买 nike

我从阅读 Sessions vs Cookies 中得到的主要信息是 Cookies 存储在客户端,而 session 存储在服务器端。如果 session 存储在服务器端,那么服务器如何知道哪个客户端是他们的?显然,某些东西必须在客户端。

每当我使用我的自滚动用户身份验证时,我都有一个 session_token我的 users 中的列数据库表。

然后,这个模块倾向于为我提供便利:

module SessionsHelper
def current_user
User.find_by_session_token(session[:session_token])
end

def current_user=(user)
@current_user = user
session[:session_token] = user.session_token
end

def logout_current_user!
current_user.reset_session_token!
session[:session_token] = nil
end

def require_current_user!
redirect_to new_session_url if current_user.nil?
end

def require_no_current_user!
redirect_to user_url(current_user) unless current_user.nil?
end
end

我相信 session 存储在服务器端,它们意味着 session_token每个用户都有。此外, session 哈希必须在客户端。如果没有,它在哪里?注意,我存储用户的 session_token 是这样的: session[:session_token] = user.session_token .最后,如果我认为 session 在客户端是正确的,那么它和 session_token 是如何保持安全的?

最后,这是否与在其他框架(如 Django、php 框架等)上处理 session 的方式相同?如果不是,有哪些关键区别?

非常感谢。

最佳答案

Rails 安全指南有一些关于 session 的好信息:

http://guides.rubyonrails.org/v3.2.16/security.html#sessions

基本上, session 数据都可以存储在 cookie 中(默认),但它使用摘要进行签名,以防止使用服务器端 secret 进行篡改(但 cookie 数据在 Rails 3.2 中没有加密,只有 base64 编码,虽然我相信它是在 Rails 4 中加密的)。

另一种方法是仅将 session ID 存储在 cookie 中,而 session 数据存储在服务器上的某个位置(例如 ActiveRecord::SessionStore )。

我认为客户端/服务器端 session 选项将得到广泛支持(尤其是服务器端)。服务器端 session 存储的其他选项可以是服务器之间共享的 memcache,甚至是内存或文件存储,它们对于集群中的每个 Web 服务器都是独立的,这意味着您的负载均衡器需要支持粘性 session (以确保用户的请求都被路由到同一台服务器,因为其他服务器不知道)。如果我没记错的话,这就是过去 Apache Tomcat 在添加集群支持之前用于服务器端 session 的情况。

关于ruby-on-rails - 在我开始在线阅读有关它们的信息之前,这些 session 对我来说很有意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com