在我开始在线阅读之前,会话对我有意义

Dav*_*vid 5 authentication cookies session ruby-on-rails ruby-on-rails-3.2

我从阅读Sessions vs Cookies中收集到的主要内容是,Cookie存储在客户端,而会话存储在服务器端.如果会话存储在服务器端,那么服务器如何知道哪个客户端是他们的?显然,必须在客户端进行某些操作.

每当我使用自动滚动用户身份验证时,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
Run Code Online (Sandbox Code Playgroud)

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

最后,这是否与在其他框架(如Django,php框架等)上处理会话的方式相同?如果没有,有什么关键的区别?

非常感谢.

won*_*nce 0

会话通常是通过将会话令牌设置为cookie来实现的。它必须是随机选择的,这样用户就无法猜测另一个用户的令牌。所有会话数据与关联的令牌一起存储在服务器上。