2012-05-21 3 views
2

У меня есть enabled sessions в App Engine, который отлично работает при развертывании приложения. Моя проблема в том, что это не работает в режиме разработки. Мне нужно что-то, чтобы упорствовать в сеансах где-то (диск, хранилище данных, память) в режиме разработки, чтобы мне не приходилось входить в мое приложение каждый раз, когда я перезапускаю локальный сервер (каждый раз, когда я вношу изменения в сервер или общий код) ,Сохранение сеанса в режиме разработки с помощью Google App Engine

Обычно я делаю это, определяя HashSessionManager в jetty-web.xml, но, видимо, (и понятно) App Engine explicitly disables этот файл конфигурации из соображений безопасности.

Кто-нибудь знает стандартный способ достижения локальной стойкости сессии в App Engine, если предположить, что он существует?

У меня есть следующие связанные строки в Appengine-web.xml:

<sessions-enabled>true</sessions-enabled> 
    <async-session-persistence enabled="true" /> 

Я использую версию 1.6.5 (последняя) на App Engine SDK.

Вот некоторые шаги, которые я взял:

В моей стороне сервера класса расширения RemoteServiceServlet, я добавил следующую строку:

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    // Added this line 
    System.out.println(request.getSession().getCreationTime()); 
    ... 
} 

Я перезапуск сервера в режиме разработчика, погрузил мое приложение и получил «1337796704817» за каждый запрос, сделанный моим приложением, указывающий, что один и тот же сеанс используется между запросами. Затем я перезапустил сервер режима dev, и был создан следующий запрос «1337796798184» с указанием нового сеанса.

Как указано ниже, я использую Google Cloud SQL, и я отключил параметры хранилища данных в настройках движка приложения, хотя это не вызывает никаких проблем при развертывании. Кроме того, я пробовал те же шаги, что и эти параметры, и получил те же результаты.

ответ

0

Сессии сохраняются в хранилище данных. Пока вы не очищаете хранилище данных при каждом перезапуске dev_appserver, ваши сеансы должны оставаться. Убедитесь, что вы не очищаете хранилище данных при каждом перезапуске.

+1

Так вы говорите, что до тех пор, как я m, не выходя из моего пути, чтобы очистить хранилище данных при запуске, сеансы должны сохраняться даже в режиме dev? В настоящее время он работает при развертывании, но я подтвердил, что сеансы режима разработки не записываются в хранилище данных, и я не проясняю это. Одно замечание: я не использую хранилище данных для чего-либо еще, я использую Google Cloud SQL, и у меня есть «Включенная локальная поддержка HRD» и «Использовать Datanucleus JDO/JPA для доступа к хранилищу данных», не установленную в настройках App Engine , – tangent

0

Если у вас установлено значение cookie_args.domain (как описано в Webapp2 Sessions), то оно не будет работать на вашем сервере разработки. То есть, если домен установлен в .mydomain.com, то он не будет работать с вашего сервера разработки localhost:8000.

Например, если ваш main.py содержит объект конфигурации, как это:

config = { 
    'webapp2_extras.sessions': { 
     'secret_key': '**secret_key**', 
     'cookie_args': {'domain': '.mydomain.com', 'httponly': True} 
    } 
} 

Решение состоит в том, чтобы написать некоторый условный код:

import os 
domain = None if os.environ['SERVER_SOFTWARE'].startswith('Development') else '.mydomain.com' 

config = { 
    'webapp2_extras.sessions': { 
     'secret_key': '**secret_key**', 
     'cookie_args': {'domain': domain, 'httponly': True} 
    } 
} 
WSGIApplication(Routing, config=config, debug=True) 
Смежные вопросы