- ベストアンサー
セッション管理について
あけましておめでとうございます。 会員制のホームページを作りたいと思っていますが、認証後のページに 移動したとき、同じセッションであることを調べるにはどうしたらいいでしょうか? たとえば、認証ページ「A」がhttp://URL/A.htmlそして、 認証後http://URL/B.phpへページが移動したときにこのアドレスを覚えられ直接入力されてもユーザ認証がされていない旨のメッセージを表示させたいのです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
LACOMS さん、あけしておめでとうございます。 さてご質問の件ですが、簡便に行うには… 「B.php」の先頭で、$_REQUEST 命令を使って「『A.html』で入れたIDとバスワード」を取得して認証をすればOKでしょう。これなら、いきなり「http://URL/B.php」と入力されても認証が通らないことになりますね。 また、セッション関数を使いたい場合は、下記の「参考URL」を見てみてください。 もし私のお答えが LACOMS さんの趣旨とズレていたら、すみませんが再度ご質問いただければ幸いです。では、よいお年を!
その他の回答 (2)
- foreach
- ベストアンサー率51% (43/84)
認証ページA session_start(); if ( 認証チェック ) { $_SESSION['loginid'] = $_POST['loginid']; $_SESSION['pass'] = $_POST['pass']; } ページBの冒頭 session_start(); if ( !isset($_SESSION['loginid']) || !isset($_SESSION['loginid']) ) { 認証ページへ飛ばす } こんな感じで簡単に実装できます。 要するにログインページで認証チェックを通らないとセッション変数に値をセットしないと決めて、他のページではセッション変数の有無で認証済みか認証前かを判別してるわけです。 大抵の場合、認証はDBアクセスが絡みますが、この方式だとログイン時の1回で済みます。
お礼
早々のご回答ありがとうございました。大変参考になりました。 またわからないことがあれば、よろしくお願い異します。
- edomin
- ベストアンサー率32% (327/1003)
セッション管理については、いろいろなページがありますから参考にどうぞ。 一例) http://www.stackasterisk.jp/tech/php/php03_06.jsp
お礼
大変参考になるページの紹介ありがとうございます。
お礼
ありがとうございます。何とかわかるようになってきました。
補足
ありがとうございます。B.phpからC.phpへページが変わるとき、同じ ユーザであるかは、$_SESIONまたは、session_register() を使って、セッション変数にユーザ名やパスワードを格納して共有するか、 session_register("abc")で変数を作っておいてc.php側でsession_is_registered("abc")でセッション変数が存在するか調べる方法があることを勉強しました。 $_SESIONとsession_register()の違いがいまいちわかりませんが? もうひとつ勉強したことは、セッションIDは同じセッション中は、同じIDを発行することです。 たとえば、B.phpで ユーザ認証でOKならば session_start(); $_SESSION['sID']=session_id(); にしておいて c.phpで session_start(); if($_SESSION['sID']!=session_id()){ print("セッションが異なります。ユーザ認証を受けてください。"); exit(); } 以下同じセッション、つまりユーザ認証がOKのときの処理 としてもOKのような気がするのですが、どの方法が一番いいのでしょうか? お手数をおかけします。