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