電子書籍の厳選無料作品が豊富!

例えば、ログインの認証機能をPHPのセッションを利用して作るとします。かつ、ログイン中にユーザのプロフィール変更画面等で、入力後、確認画面を出す際、formのhiddenでなく、これもセッションを利用するとします。

このように、一回のリクエスト/レスポンスに二つ以上のセッションが同時に走る場合、どのように管理するのが効率よいでしょうか?

A 回答 (3件)

ログインで利用している$_SESSIONを、ログイン中でもいたるところで利用したい、ということでいいかね?


$_SESSIONを2次元連想配列で持たせればどうでしょうか?

ログイン認証で持つセッション名:$_SESSION['auth']
このときのログインIDとかは
$_SESSION['auth']['login_id']に格納します。

プロフィール変更画面のForm受け渡しで使うセッション名:$_SESSION['profile_edit']
このときに受け渡す項目名値は
$_SESSION['profile_edit']['user_name']
$_SESSION['profile_edit']['user_tel']
などに格納します。

プロフィール変更画面の修正が終わったら、unset($_SESSION['profile_edit'][)でクリア。こうすればログインの情報はクリアされずにいけます。

的外れでしたらごめんなさい。
    • good
    • 0
この回答へのお礼

ありがとうございます。

いえ、全然的外れではありません。2つの状態を保持するのに、例えばクッキーなら、SESSID1とSESSID2の二つを発行できますが、セッションなら一つしか発行できないですよね?
おそらく、アクセス元を判別できればいいだけなので、二つ発行する意味がないのだと思うのですが、どのようにしたらいいのかと思いました。

$_SESSION['auth'] = $arr_auth;
$_SESSION['profile'] = $_POST;

みたいにすればいいということでよね。
このやり方は、常套手段なのでしょうか?

お礼日時:2008/02/29 00:22

常套手段である、というより私はこういう使い方で問題無い、という認識でいます。

$_SESSIONは、IDをはく、というよりも普通に変数として利用でき、閲覧者一人一人分、固有の情報を持ちまわれる、という認識です。奥深い内部ではどのような制御であるかはわかりません。
一般的な「セッション」概念と$_SESSIONは別物です。
わかってらっしゃるかもしれませんが、つまり、ログイン情報など閲覧者固有の情報を、各ページで持ち回り整合を保ち続けることを「セッション」管理といい、これを解決する技術的な方法として、$_COOKIEや$_SESSIONという変数が用意されている、と理解して誤りではないと思います。
「二つ以上のセッションが同時に走る」という考え方より、固有識別のために、変数(配列)として自由に利用できる、という考えでOKではなかろうかと。
私は独自のフレームワークでこうしていますので、このやり方がそちらのフレームワークに即しているなら
$_SESSION['auth'] = $arr_auth;
$_SESSION['profile'] = $_POST;
という使い方でOKと思います。
    • good
    • 0

きちんとやるなら、テンポラリデータとセッションを分けてしまった方が良い気がします。



私はtmpfsやmemcachedなど、メモリを使ってテンポラリデータを作ることが多いです。

ただし、テンポラリの方はcronなどでGCに頼らない削除機能が必要なので、ちょっと面倒です。

それほど負荷の高いサイトでなければ、PHPのSESSIONに入れてしまってもいいんじゃないかな?と思います。

この回答への補足

テンポラリデータが確認画面の状態保持で、セッションが認証状態の保持ということでよろしいですか?

すいません、あとレンタルサーバでの運用を考えています。ですので、PHPのSESSIONを使うと思うのですが、どのように、二つの状態を保持すればよいのかなと思いまして。

cookieなら二つのIDを発行して、DBに実データを保持できますが、セッションなら、どのようにやればいいでしょうか?

補足日時:2008/02/29 00:06
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!