Сделать переменную Session доступной только до следующего запроса - PullRequest
0 голосов
/ 11 февраля 2011

Вот сценарий.Веб-серфер (посетитель) находится на странице покупки веб-сайта.На этой странице посетитель может либо ввести данные о регистрации нового пользователя, информацию о кредитной карте и завершить покупку, одновременно создавая нового пользователя, либо он может войти в свою существующую учетную запись.Если посетитель решает войти, используя свою существующую учетную запись, он должен быть перенаправлен на ту же страницу покупки после создания нового сеанса.Мне удалось добиться этого с помощью двух переменных сеанса session [: pchase_page_after_login] = true и session [: path_purchase_page] = path_of_current_page .После входа я делаю эти varialbes ноль.

Все это отлично работает, если пользователь входит в систему со страницы покупки.Однако если пользователь переходит на другие страницы со страницы покупки, эти две переменные сеанса по-прежнему сохраняются в сеансе и не равны нулю.Следовательно, если после просмотра нескольких других страниц посетитель попытается войти в систему, он будет перенаправлен на ту же страницу покупки, что и session [: pchase_page_after_login] = true и session [: path_purchase_page] = все еще существует.Таким образом, я хотел бы знать, есть ли способ разрешить доступ к определенной переменной сеанса только в следующем запросе.Я знаю, что контент в : flash доступен только в следующем запросе, но я не знаю, целесообразно ли использовать для этой цели.Переменная сеанса больше подходит, но я хочу, чтобы эти две переменные сеанса были доступны только для следующего запроса.Есть ли способ добиться этого?Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Я бы порекомендовал вам использовать фильтр before для достижения этой цели.Например, вы можете сделать следующее:

class ApplicationController
  before_filter :delete_session_purchase

  protected

  def delete_session_purchase
    session.delete :path_purchase_page
    session.delete :purchase_page_after_login
  end
end

class SessionsController
  skip_before_filter :delete_session_purchase, :only => [:new, :create]
end

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

1 голос
/ 11 февраля 2011

Вы хотите flash в этом случае. Он сохраняется в сеансе, но просто автоматически очищается после следующего запроса. Индивидуальное решение в конечном итоге будет эффективно копировать то, что уже делает Flash.

Кроме того, вы можете просто redirect_to :back после входа в систему, что приведет их обратно на страницу, с которой они вошли в систему.

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