Home » PHP, Programing » symfonyで携帯のセッションIDを扱う

Check     このエントリーをはてなブックマークに追加

さて、symfonyで携帯開発第2弾。

セッションIDは、DoCoMoは埋め込み、AU、SoftbankはCookieを利用

これを実現する。セッション部分をオーバーライドして対応するので、複数サーバになった時に対応できるようにセッションをmysqlで管理するようについでに変更する。

まずは、sfMySQLSessionStorageをオーバーライドするクラスを作成する。
lib/storage/myMobileSessionStorage.class.php
[PHP]
E_STRICT) {
error_reporting($er – E_STRICT);
}
require_once(‘Net/UserAgent/Mobile.php’);
$agent = &Net_UserAgent_Mobile::singleton();
if ($agent->isDoCoMo())
{
ini_set(“session.use_trans_sid”, 1);
}
parent::initialize($context, $parameters);
}
}
[/PHP]
通常は、factories.ymlにsfMySQLSessionStorageを利用するように宣言するのだが、ソースのようにしてそれを携帯のアプリケーションの場合は登録するようにする。ちなみにドコモの場合のみini_setし、それ以外は通常通りクッキーを利用する。

apps/app_dir/config/factories.yml
[code]
all:
storage:
class: myMobileSessionStorage
param:
db_table: session
db_id_col: id
db_data_col: data
db_time_col: updated_at
database: propel
session_cookie_domain: .domain.com
session_name: s
[/code]
これで、app_dirアプリケーション以下のドコモの場合のみ、URLにセッションIDがリンクに付与されるようになる。

そう、セッションテーブルを作成するのを忘れてはいけない。
config/schema.yml
[code]
propel:
session:
_attributes: { phpName: Session }
id: { type: varchar(32), primaryKey: true, required: true }
data: { type: longvarchar }
updated_at: { type: integer }
[/code]
これをsymfonyコマンドを利用して、テーブル作成する。

じつは、これだけでは足りない。actionクラスなどで、リダイレクトする場合はセッションIDが付与されない。そのため、
[PHP]
$this->redirect(‘module/action?’.SID);
[/PHP]
このように引き継がないといけない。これもドコモだったらみたいなif文を書かないといけないのか、それとも害はなさそうなので全部そうしてしまうか・・・

redirect関数もオーバーライドすればいけそうだが、そこに関してはまた後で研究することにする(手抜き)

Check     このエントリーをはてなブックマークに追加
タグ: ,