【发布时间】:2010-09-28 01:12:33
【问题描述】:
每个客户端都由一个哈希标识,并与每个请求一起传递给服务器。在这种情况下,处理跟踪用户会话的最佳方法是什么?
我正在对用户帐户等使用 restful_authentication。预计很大一部分请求将在没有用户帐户的情况下发起,而只是唯一的哈希。
我对会话处理方式的理解有限,因此请记住这一点。 :)
【问题讨论】:
标签: ruby-on-rails ruby web-services request
每个客户端都由一个哈希标识,并与每个请求一起传递给服务器。在这种情况下,处理跟踪用户会话的最佳方法是什么?
我正在对用户帐户等使用 restful_authentication。预计很大一部分请求将在没有用户帐户的情况下发起,而只是唯一的哈希。
我对会话处理方式的理解有限,因此请记住这一点。 :)
【问题讨论】:
标签: ruby-on-rails ruby web-services request
在 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
【讨论】: