在线教程后,我有一个会话控制器,如下所示:
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;数据库表支持这个,虽然登录确实有效。有没有办法让我列出登录用户,或者那是不可能的?如果服务器没有存储在某个地方,服务器如何保持会话?
答案 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基本上相同的东西结帐: