symfonyで携帯向け開発その2

ここに記事書くためだけに会社にきてしまいました。 Tsukimiyaです。こんにちは。 今日は携帯でセッションを使いたい時どうするか、ということについて軽くふれます。

携帯電話には、cookieを使えない機種があります。 というか、DoCoMoでは使えない。 cookieの使えない環境でセッションを使いたい場合どうしたらいいかと言うとSIDをURLに埋め込んだりするんですが一々埋め込むのは面倒。 というより

<?php echo link_to("ほげもげ", "foo/bar?".SID)?>

と書くと http://example.com/foo/bar/symfony/123457890abcdef…. とかなってしまってPHPからセッションIDとして判断されない

むかついたので、URLの生成に使っているControllerに含まれるgenUrl()メソッドをオーバーライドした。 触る場所は /path/to/symfonyproject/apps/modulename/lib/myFrontWebController.class.php。 ここに以下のメソッドを追加する。

    public function genUrl($parameters = array(), $absolute=false)
    {
        $url = parent::genUrl($parameters, $absolute);
 
        if (defined("SID")) {
            // #の対応
            $fragment = null;
            if (false !== ($pos = strpos($url, '#'))) {
                $fragment = substr($url, $pos + 1);
                $url = substr($url, 0, $pos);
            }
            $url .= "?" . SID;
 
            if ($fragment) {
                $url .= "#" . $fragment;
            }
        }
 
        return $url;
    }

実際は携帯判別してSIDを付加したほうが良いんだけど、とりあえずこんな感じで http://example.com/foo/bar?symfony=123457890abcdef…. というURLが生成され、無事セッションが使えるようになった・・・のだけど。

よく考えたら、filterで携帯からのアクセスかどうかを判別して

ini_set("session.use_trans_sid", 1);

これだけで良かったのでは・・・orz