ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

処理の流れを勘違いしていると、現象がわからなくなる

わかると、なんだそんなことかだけど。

f:id:AJYA:20120906213653j:plain

photo credit: mrbill via photo pin cc

 

現象

セッション変数の値を消すために、

unset($_SESSION["val1]);

としているが、同じセッション変数名を使っている別の画面に遷移すると、値が保持されたままになっている。

 

調査

unsetだけではだめだっけ?と考えながら

$_SESSION["val1] = "";
unset($_SESSION["val1]);

を追加したり、unsetの実行位置を変えたりして動作の確認をしていると、データ処理では、正しくセッション変数の値は消えていたが、PDFファイルを出力する処理では、セッション変数の値は消えていないことに気がついた。

 

今回現象が起きている部分は、データ処理の場合、

1.画面からロジックに画面からの値をPOSTする。

2.POSTされた値をロジックで処理し、POSTの値をセッション変数に設定する。

3.ロジックから画面に戻る

4.画面の再描画時にセッション変数に値が設定されていたら、利用する。

5.セッション変数を破棄する。

というような処理の流れになっている。

 

PDFファイルを出力する場合は、

1.画面からロジックに画面からの値をPOSTする。

2.POSTされた値をロジックで処理し、POSTの値をセッション変数に設定する。

3.PDFファイルを出力する

というような処理になっている。

データ処理の3.以降の処理が行われていないので、セッション変数の値が消えないということがわかった。

 

対処

POSTの値をセッション変数に設定する処理を、データ処理の場合だけ行うようにして、PDFファイルの出力の場合は行わないように修正した。

 

わかれば単純なんだけど、動作させないと気づかない内容だ。