[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 メーリングリストの案内