アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

sfSslRequirementFilter似のプラグインを作成しました+おまけ

こんばんは。
アシアル笹亀です。

先週の金曜日にアシアル技術陣とKLab様で合同勉強会に参加させていただきました。とても刺激的で充実した勉強会となり、とても楽しい時間を過ごさせていただきました。

この場をお借りして、KLab様の皆様へ御礼申し上げさせていただきます。
ありがとうございました。

さて、勉強会の当日は発表する機会を与えていただきました。
発表した内容について今回は解説させていただきます。
 ※Q4M (Queue for MySQL)については次回にしたいと思います。

symfonyプラグインでsfSslRequirementがあります。
sfSslRequirementはモジュールやアクションのために、
SSLによる暗号化のサポートを提供するsymfonyプラグインです。

上記のプラグインを元にサイトの用途にあわせたオリジナルのsfSslRequirement(trainSslRequirementFilter)を作成しました。
そもそも作った理由ですが、apps間で切り分けてセッションのやり取りがsfSslRequirementPluginじゃうまくできませんでした。
それならば作ってしまおうということになりました。

trainSslRequirementFilterの特徴は以下に記述します。


1.sfSslRequirementで使えるところを流用した
 →ymlの設定でactionごとに設定を行い「通常→SSL→通常」のようにredirectするところ


2.引き継ぎたいセッション情報のみをserializeしてファイルで保存するセッションを引き継ぐように改良
 →ワンタイムセッションファイルを作って引き継ぐようにした


3.携帯でのセッションIDを利用したセッションの受け渡しもできるようにする


trainSslRequirementFilterではHTTPS時に引き継ぎたいセッションファイルをserializeしてファイルで保存するセッションを引き継ぐように改良しました。
実際の動作イメージです。


trainSslRequirementFilterはredirectで操作されるので他のFilterより必ず先に設定を行います。
下記は携帯での設定の一部になります。


  trainSslRequirementFilter:
    class: trainSslRequirementFilter

  rendering: ~
  web_debug: ~
  security:  ~
  
  mobile:
    class: asMobileFilter

  cache:     ~
  common:    ~
  flash:     ~
  execution: ~


実装をとりあえず終えた後に検証を行った際のいけていなかった点をまとめました。


1.新しいセッション情報を引き継ぎたい場合に新しく内容を記述しないといけない。


2.バグが起こったときに修正をしにくい感じで実装をしてしまった
 →redirectでhttp、httpsを操作する箇所で混乱する


逆によかった点


1.必要なセッション情報しかわたさなかったため、変な残ったセッション情報なども都合よく消えてくれた


2.SSL側ではドコモ携帯のguid=ONが取得できないが、このプラグインでHTTP側で取得したものをセッションに入れてHTTPSへ引き継ぐということが可能になった。


symfonyでもそれ以外でも無いプラグインや機能というのは自分でなんでも作ってしまえばいいのだと思います。
このFilterも実用性は皆無ですが、もうちょっと改良を加えてプラグイン化していきたいと思います。
皆さんも自分で作ったプラグインなど教えていただけましたら幸いでございます。


☆おまけ
symfony ccで時間がかかる場合に別ページに遷移してくれる設定があることをおやぢ組の方がご紹介をしておりまして、とても参考になりました。

symfony ccで時間がかかる場合

ちなみにどういったときに使うか?
自分の場合はsfCacheで大量のキャッシュファイルを作成しているので、どうしてもsymfony ccで削除するのに時間がかかってしまうので、そういったときに利用できるなぁっと思いました。

>おやぢ組の方
情報提供、誠にありがとうございました。