Как сохранить простые пользовательские настройки в сеансе - PullRequest
1 голос
/ 21 сентября 2009

Когда кто-то посещает мой сайт расписания поездов , он вводит «от станции», «на станцию», а затем отправляет форму для получения расписания.

Я хочу, чтобы сайт запомнил последний выбор пользователя от / до станции при следующем посещении сайта. Вот моя текущая стратегия:

В моем действии index (действие, соответствующее корневому URL):

def index  
  to_station = "Grand Central Terminal"
  from_station = ""

  if session[:from_station]
    from_station = session[:from_station]
  end
  if session[:to_station]
    to_station = session[:to_station]
  end

  @schedule = Schedule.new(:to_station => to_station, :from_station => from_station)
end

В моем действии show (действие, которое показывает фактическое расписание поездов):

def show
  @schedule = Schedule.new(params[:schedule])

  if @schedule.trains
    session[:from_station] = @schedule.from_station
    session[:to_station] = @schedule.to_station
    render :partial => 'table', :locals => { :schedule => @schedule }
  else
    render :partial => 'error', :locals => { :schedule => @schedule }
  end
end

А по моему ApplicationController:

  session :session_expires => 1.year.from_now

Это правильный подход? В частности, является ли session :session_expires => 1.year.from_now «правильным» способом заставить сеанс (и, соответственно, выбор станций пользователем) длиться «долгое время»?

1 Ответ

4 голосов
/ 21 сентября 2009

Вы должны использовать куки

cookies[:<name>] = { :value => "<value>", :expires => <time of expiry>}

Первая причина этого заключается в том, что хранение данных в сеансе означает, что данные хранятся в памяти вашего сервера. В конце концов, если вы будете хранить эти данные в памяти в течение такого большого количества времени, ваша память заполнится

Вторая причина заключается в том, что если вам нужно перезапустить ваш сервер (или что-то, что требует перезапуска службы apache / iis / ror / web hosting), данные сеанса будут очищены. Сессия обычно предназначена для кратковременного хранения данных.

Теперь есть такие вещи, как SqlSessionStores (например, http://railsexpress.de/blog/articles/2005/12/19/roll-your-own-sql-session-store), так что вы можете хранить свои данные сеанса гораздо дольше, без ограничения заполнения памяти сервера и без ограничения потери всех данных сеанса, если вы перезапустите ваш Однако имейте в виду, что они по-прежнему предназначены для кратковременного хранения, я бы не стал использовать их для долговременного хранения.

Cookie - сохраняется до тех пор, пока пользователь не удалит куки в браузере или пока не истечет срок действия куки; долговременное некритическое хранение

Сеанс - сохраняется до тех пор, пока пользователь не удалит файлы cookie в браузере (файлы cookie используются для отслеживания пользователя и идентификации его сеанса), пока веб-служба / сервер не перезапустится или сеанс не истечет; кратковременное некритическое хранение

SqlSession - сохраняется до тех пор, пока пользователь не удалит куки в браузере или не истечет время сеанса; кратковременное некритическое хранение

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