172月2008
Filed under: PHP, Web技術
Author: ueblog
さて、symfonyで携帯開発第2弾。
セッションIDは、DoCoMoは埋め込み、AU、SoftbankはCookieを利用
これを実現する。セッション部分をオーバーライドして対応するので、複数サーバになった時に対応できるようにセッションをmysqlで管理するようについでに変更する。
まずは、sfMySQLSessionStorageをオーバーライドするクラスを作成する。
lib/storage/myMobileSessionStorage.class.php
PHP:
-
<?php
-
class myMobileSessionStorage extends sfMySQLSessionStorage
-
{
-
public function initialize($context, $parameters = null)
-
{
-
//E_STRICT NOTERROR VIEW
-
-
if ($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);
-
}
-
}
通常は、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
これで、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 }
これをsymfonyコマンドを利用して、テーブル作成する。
じつは、これだけでは足りない。actionクラスなどで、リダイレクトする場合はセッションIDが付与されない。そのため、
PHP:
-
$this->redirect('module/action?'.SID);
このように引き継がないといけない。これもドコモだったらみたいなif文を書かないといけないのか、それとも害はなさそうなので全部そうしてしまうか・・・
redirect関数もオーバーライドすればいけそうだが、そこに関してはまた後で研究することにする(手抜き)
関連する記事
←ぽちっとな
<<symfonyでPEAR::Net_UserAgent_Mobileを使う
ClamAVがwarアーカイブを消してしまう>>

(
3)

(
0)

(
0)

(
0)
Total: 3