У меня есть простое приложение rails с одним контроллером. У меня есть «фильтр перед» для некоторых методов моего контроллера, где я проверяю, вошел ли пользователь в систему, просматривая объект сеанса:
@user = User.where(:id => session[:user_id]) if session[:user_id]
В методе входа в систему моего контроллера я делаю:
session[:user_id] = user.id
Довольно обычные вещи. Если я получаю доступ к своему приложению из веб-браузера (Chrome), все работает нормально. Однако, когда я использую NSURLRequest из своего приложения iOS для доступа к моему приложению rails, сервер всегда создает новый сеанс для каждого запроса. Похоже, он никогда не сможет идентифицировать существующий сеанс, даже если запрос отправляет файл cookie с правильным идентификатором сеанса. На самом деле, если я посмотрю на объект cookie в моем приложении rails, я увижу, что он содержит идентификатор сеанса. Однако объект сеанса всегда пуст! Не уверен, почему сервер не может получить сеанс. Я использую Пассажирский Phusion. Какие-либо предложения?
cookies
в приложении rails содержит идентификатор сеанса, а не просто идентификатор сеанса a? Если приложение отправляет запрос без него, первое, что сделает сервер rails, — это выделит новый идентификатор сеанса и установит его в файле cookie. Таким образом, вы всегда будете видеть идентификатор сеанса. Нужно проверить, что он не меняется при каждом запросе. - person aroth   schedule 07.10.2012