每个客户端都由一个哈希标识,与每个请求一起传递给服务器。在这种情况下,处理跟踪用户会话的最佳方法是什么?
我正在对用户帐户等使用restful_authentication。预计很大一部分请求将在没有用户帐户的情况下发起,而只是唯一的哈希。
我对处理会话方式的理解有限,因此请记住这一点。:)
每个客户端都由一个哈希标识,与每个请求一起传递给服务器。在这种情况下,处理跟踪用户会话的最佳方法是什么?
我正在对用户帐户等使用restful_authentication。预计很大一部分请求将在没有用户帐户的情况下发起,而只是唯一的哈希。
我对处理会话方式的理解有限,因此请记住这一点。:)
在 URL 中使用此哈希意味着您没有 Rails 内置会话。会话的重点是在请求之间提供某种状态感。你已经提供了这个状态,看到你正在传递这个哈希,所以在我看来你可以删除 restful_authentication 插件并做这样的事情:
class ApplicationController < ActionController::Base
def require_login
if params[:access_key]
@current_user = User.find_by_access_key(params[:access_key]) || restrict_access
else
restrict_access
end
end
def restrict_access
flash[:error] = "You have to log in to access that."
redirect_to root_path
end
end
然后,before_filter :require_login
在需要登录才能访问的控制器中执行操作。
取决于您要做什么,但session
哈希可能会提供您想要的。会话将自己存储在某个地方(加密的 cookie、数据库或服务器上的文件),并在 cookie 中向客户端发送唯一标识符(类似于您的“哈希”)。在后续请求中,会读取 cookie,并将相应用户的会话数据恢复为session
哈希。
session[:user] = currently_logged_in_user.id
# ... next request ...
session[:user] # returns the currently logged in user's id