今日、オコラボのサイトを暫定で完成としてデプロイしましたー!パチパチパチ!!
暫定で完成ってのも変な表現だけど。
自社サイトをSlim3使ってGAE上に構築するというのは、ローコストかつ安定してるので、機会損失が自社サーバで行うよりも少ないだろうと思います。こういう提案もしていきたいなぁ〜と思ってます。アクセス数によるけど、基本的に維持費はドメイン代だけで済むし。有料になるくらいアクセス集中するって、よっぽどですからね。
さて、話はSlim3でセッションを使うです。PHPerな自分はそういえばSlim3でセッションを使うようなことをしたことがなかった!セッションを使いたかった理由は、お問い合わせページでリロードによる連投を防ぐためです。
まず、appengine-web.xmlのsessions-enabledをtrueにします。
<sessions-enabled>true</sessions-enabled>
これでセッションが使えるようになりました。
セッションの設定方法、取得方法、削除方法は以下の通りです。
// セッション "key"に値"value"を設定する。 sessionScope("key", "value"); // セッション "key"を取得する。 String key = sessionScope("key"); // セッション "key"を削除する。 removeSessionScope("key");
セッションのデータはDatastoreにどんどん蓄積されていくので、定期的に削除してやらなければならない模様。どうも既にセッションデータをクリーンするサーブレットは準備されているらしいので、cronで定期的に削除してやればよいらしいっす。
web.xmlに以下を追加します。
<servlet> <servlet-name>_ah_sessioncleanup</servlet-name> <servlet-class>com.google.apphosting.utils.servlet.SessionCleanupServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>_ah_sessioncleanup</servlet-name> <url-pattern>/_ah/sessioncleanup</url-pattern> </servlet-mapping> <security-constraint> <web-resource-collection> <web-resource-name>session-cleanup</web-resource-name> <url-pattern>/_ah/sessioncleanup</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
また、cron.xmlに以下のようにします。(cron.xmlがない場合はWEB-INF以下に作成)
<?xml version="1.0" encoding="UTF-8"?> <cronentries> <cron> <url>/_ah/sessioncleanup?clear</url> <description>Clean up sessions</description> <schedule>every 12 hours</schedule> </cron> </cronentries>
以上でーす。