2007年11月15日

CodeIgniterのセッションクラス

前回は愚痴ばかりでしたが、未だにそれが標準的な実装なのかどうかはわからないものの、CodeIgniterで検索結果をページネーションクラスを使ってページングするためにはおそらくセッションを使うしか方法がない、というところに辿り付きました。前回も書きましたがこれ以外に何かよい方法、普通はこうするだろみたいな方法がありましたら是非教えて欲しいです。

で、今回はセッションクラスを使ってみようとおもいます。自分はだいたい新しいことを試す時はユーザガイドを読むよりも先に、ネットで検索します。そうすると意外に早く理解できたりといったことが多いので…。

CodeIgniterのセッションも検索してみました。するといきなりこんな情報が…CIの標準のsession機能は、何とcookieに全てのデータを入れる仕組み。う〜む、これってどうなんでしょう?

試しに今まで作ってきたスクリプトではなく単にセッションだけのスクリプトを書いてテストしてみました。そしたら確かにクッキーに全情報が入ってました。まあシリアライズ?というのかぱっと見ではよくわからなかったりもしますが。

すると上記ページにPHPのセッションを使ったものがWikiに置いてあると書いてあったので今度はそれを試してみます。

まずFILESというところのコードをコピーしてファイルを作り指定のディレクトリへ…、ってapplication/init/ってないじゃん(--;わからないけど作っちゃえ。んでそこにinit_phpsession.phpとして保存。phpsession.phpはlibirary(これはある)フォルダに保存。

あとは普通のライブラリのように
$this->load->library('phpsession');

でロードして、Exampleのように使う。

すると、今までクッキーに全部入っていたデータが、クッキーにはセッションIDだけになりサーバ側の指定ディレクトリ(デフォルトだとtmpとかか?XAMPPなのでイマイチわからない)にそのセッションIDと同じファイルができてる。中を見るとちゃんとデータが入ってます。

ってこれはPHPのセッション動作そのものですね。自分は前に使ったことがあったので、なるほどこれでできるのかと思いましたが、セッション機構そのものがはじめての人はわかりづらいかもしれませんね。

それはともかくこれで普通のPHPセッションが使えることが判明。これを作ってくれた人に感謝。そしてこれで検索条件が保存できるはず。ということで実装。

POSTデータを直接受取っていた部分
$data['newcity'] = $this->input->post('newcity');

を一旦セッションに格納してから取ってくるように変更
$newcity = $this->input->post('newcity');
if ($newcity <> "")
{
$this->phpsession->save('newcity', $newcity);
}

$session_newcity = $this->phpsession->get('newcity');
if ($session_newcity <> "")
{
$data['newcity'] = $session_newcity;
} else {
$data['newcity'] = "";
}

これで一応検索結果をページングできるようになりました。が、また別の落とし穴が…(--;
ラベル:codeigniter
posted by ciallost at 13:08| Comment(1) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
getでやればよくないですか?
検索条件が多いなら別ですが
Posted by どん at 2011年10月26日 11:35
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック