[PHP-users 25179] Re: セッション管理について

Genshirou Taki g_taki @ max-corporation.com
2005年 3月 29日 (火) 12:07:04 JST


g_takiです。

viola wrote:
> viola と申します。
> C メニュー画面にてセッション処理実行
>         1 session_start() // セッションスタート
>         2 session_unregister() // セッションに登録された値を削除
>         3 session_unset() // セッション開放
>         4 $_SESSION[ID] = ID // セッションセット
>         5 isset関数にてセッションが存在するかチェック、存在しなければ
>          ログイン画面に戻す(Header関数使用)
>
中略
表現の問題だけかもしれませんが、
session_start()した後で、isset($_SESSION) は常にTRUEになるでしょうから、
isset($_SESSION['id']) とかにしないと意味がないですよね。

処理Fが終わってCにきたときに、
2(3)でセッションの内容を破棄して、
4でIDを登録するのは意味があるのでしょうか?

処理Cはこんな感じにしてはどうでしょうか?
1 session_start()
  $ID = $_REQUEST['ID']; //分かりやすいように単純に表記しています
                         //実際には汚染に注意 :-p
2 if(isset($ID)){
3   $IDが有効かどうかを確認の処理
4   if($IDが有効な値){
5     $_SESSION['ID'] = $ID;
    }
  }
6 if(!isset($_SESSION['ID'])){
   header()
  }
7 通常処理


また、泥臭い手法ですが、
処理Cの1-5の各ステップの前後や、各ページで、
print_r($_SESSION)などをして、期待通りに動いているか確認してみるのもよい
と思います。

> *C〜Fのhtml画面では <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
> を使用し、キャッシュをクリアしています。
>           
> 以上、A〜Fまでの処理を行い、ID、パスワードを変更するのですが、
> Fの確認画面よりリンクでメニュー画面に戻り、ID、パスワード変更画面
> へ遷移した場合、変更前の情報が出力されてしまいます。
> ブラウザをリロードすると更新された情報が出力されます。



PHP-users メーリングリストの案内