Вопрос простой сессии Rails - PullRequest
3 голосов
/ 13 июля 2011

После ознакомления с онлайн-уроком у меня есть контроллер сессий, который выглядит следующим образом:

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

Нет таблицы модели и базы данных, которая бы поддерживала это, хотя вход в систему работает.Могу ли я перечислить зарегистрированных пользователей или это невозможно?Как сервер сохраняет сеансы, если они не хранятся где-то?

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Как насчет этого:

Обновите поле с именем последнего просмотра

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 голос
/ 13 июля 2011

По умолчанию сеансы основаны на файлах cookie.Так как это на стороне клиента, вы не сможете узнать, кто подключен или нет.

Принцип таков:

  • сеанс зашифрован в браузере

  • куки не могут содержать более 4ko, поэтому внутри

* 1014 хранятся только идентификаторы. Конечно, вы можете изменить это поведение по умолчанию и сохранить информацию в базе данных,кэш или что-то в этом роде.

Знание того, кто находится в сети, может быть определено с помощью параметра lastseen, как уже упоминалось в потоке.

Однако будьте осторожны: использование такого рода функций может потребовать большого количества запросов в БД.Предпочитаю использовать кеш.

0 голосов
/ 13 июля 2011

Это базовая аутентификация http.Вам не нужны какие-либо вещи на стороне сервера для этого.См. Мой пост об этом здесь:

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

Или оформить заказ в основном на railsguides:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...