読者です 読者をやめる 読者になる 読者になる

fuelphpでセッションidをurlパラメータで引き回す方法

fuelphp php

やりたいこと

タイトルのとおりですが、http://example.com/?session_id=***
のようにurlでセッションidを引き回してセッションを使用したかった。
ガラケー(フューチャーフォン)時代はcookieが使えない端末が多かったのでこのようなやり方はよくやってました。
まぁ、今ならcookie非対応端末なんてほとんどないしそういう端末はサービス非対応としてしまっても問題なさそう、、、

まずは設定

fuel/core/config/session.phpを編集

// 33行目くらい cookie→file
//'driver'			=> 'cookie',
'driver'			=> 'file',

// 51行目くらい true→false
//'encrypt_cookie'	=> true,
'encrypt_cookie'	=> false,

// 72行目くらい session_id ★session_idという名前は適当です
//'post_cookie_name' => '',
'post_cookie_name'	=> 'session_id',

// 78行目くらい true→false
//'enable_cookie'	=> true,
'enable_cookie'	=> false,

// 91行目くらい fuelfid→session_id ★session_idという名前は適当です
// specific configuration settings for file based sessions
'file' => array(
//    'cookie_name' => 'fuelfid',
    'cookie_name' => 'session_id',
    'path' =>	'/tmp',
    'gc_probability' => 5
),

保存先をcookieからfileに変更しています。cookieは使わないという話なので。
で、fuelphpの標準で他にもdbやmemcachedなどもあるのですが今回は試していません。が、webサーバが複数台構成の場合はこちらを使う必要があります

セッションidを引き回す

//getの例
<a href="/page?<?php echo Config::get("session.file.cookie_name"); ?><?php echo Session::key(); ?>">リンク</a>

//postの例
<form method="post" action="index">
<input type="hidden" name="<?php echo Config::get("session.file.cookie_name"); ?> value="<?php echo Session::key(); ?>">
<input type="submit" value="submit"/>
</form>

こんな感じ。他にもやり方あるのかもしれないけど、ちょっとわからなかったので、、、
ただ、こうするならせめて引き回すパラメータ名の箇所は別で定義とかしておいたほうが楽そうですね。

さいごに

たぶんfuelphpではurlパラメータでセッションidを指定したするっていうのを想定した実装にはなってないと思います。
sessionに関する情報は多いので、fuelphpのSessionクラスを使うのでなくセッションクラスを自作してしまうのもありかと。

今回はハイブリッドアプリ開発の調査中にブラウザのcookieを使ったセッション管理を使うよりも、urlパラメータ方式でセッション管理したほうが都合がいいんじゃないと思ってちょっと調べてました。
これについての具体的な実装方法については後日まとめてみたいと思います。
ただ、urlにセッションidをさらすことについては昔から色々言われてはいるのですが、、、

以上です