简单的Rails会话问题

时间:2011-07-13 14:24:12

标签: ruby-on-rails

在线教程后,我有一个会话控制器,如下所示:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.authenticate(params[:email], params[:password])
    if user
      session[:user_id] = user.id
      redirect_to root_url, :notice => "Logged in!"
    else
      flash.now.alert = "Invalid email or password"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_url, :notice => "Logged out!"
  end

end

没有模特&amp;数据库表支持这个,虽然登录确实有效。有没有办法让我列出登录用户,或者那是不可能的?如果服务器没有存储在某个地方,服务器如何保持会话?

3 个答案:

答案 0 :(得分:2)

这个怎么样:

更新名为“上次见过”的字段

class ApplicationController
  before_filter :update_last_seen
private
  def update_last_seen
    current_user.last_seen = DateTime.now
    current_user.save
  end
end

然后查找最后一次在最后X分钟内看到的所有用户

@online_users = User.find :all, 
                      :conditions => ["last_seen > ?",5.minutes.ago.to_s(:db)]

答案 1 :(得分:1)

默认情况下,会话基于cookie。所以,因为它是客户端,你将无法知道谁是连接的。

原则是:

  • 会话在浏览器中加密

  • Cookie不能超过4ko,因此只有id存储在

您当然可以更改此默认行为并将信息存储在数据库,缓存或其他任何内容中。

知道谁在线可以通过线程中已经提到的lastseen参数推断出来。

请注意:使用此类功能可能会占用大量数据库查询。更喜欢使用缓存。

答案 2 :(得分:0)

这是基本的http身份验证。你不需要任何服务器端的东西。请在此处查看我的博文:

http://codeglot.com/posts/1-default_authentication_for_simple_rails_apps

或者在railsguides基本上相同的东西结帐:

http://guides.rubyonrails.org/getting_started.html#security