2

アプリがデプロイされたときに完全に機能する App Engine でセッションを有効にしました。私の問題は、これが開発モードでは機能しないように見えることです。ローカル サーバーを再起動するたびに (サーバーまたは共有コードを変更するたびに) アプリにログインする必要がないように、開発モードでセッションをどこか (ディスク、データストア、メモリ) に永続化するものが必要です。 .

私は通常、jetty-web.xml で HashSessionManager を定義することによってこれを行いますが、明らかに (そして当然のことながら) App Engineはセキュリティ上の理由からその構成ファイルを明示的に無効にします。

App Engine でローカル セッションの永続性を実現する標準的な方法を知っている人はいますか?

appengine-web.xml に次の関連行があります。

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

App Engine SDK のバージョン 1.6.5 (最新) を使用しています。

ここに私が取ったいくつかのステップがあります:

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 を使用しており、アプリ エンジンの設定でデータストア オプションを無効にしましたが、デプロイ時に問題が発生することはないようです。また、これらのオプションをオンにして上記と同じ手順を試したところ、同じ結果が得られました。

4

2 に答える 2

0

セッションはデータストアに保持されます。dev_appserver を再起動するたびにデータストアをクリアしない限り、セッションは維持されます。再起動するたびにデータストアをクリアしていないことを確認してください。

于 2012-05-22T01:55:08.003 に答える
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)
于 2016-05-07T02:40:04.750 に答える