2012-02-25

同一セッションに悩まされ

Internet Explorer も、気がついてみたらFirefoxまでも、複数タブ・ウィンドウ間で同一セッションになってしまった。確か、Firefox 3.6のときは、ウィンドウが別だったらセッションも別になっていたと思ったのになぁ...

で、同一セッションになって困るのは、セッション変数の扱い。

同じフォームを二つのタブやウィンドウで開くと、後から開いた方の値でセッション変数は上書きされてしまう。

これを防ぐには、フォームがはじめて表示されたときにフォームに対して一意の値を生成し、そいつを毎回POSTする。
そして、セッション配列へフォームの値を保存するときは、POSTされた一意の値をセッション配列のkey、保存したいフォームの値をvalueとすればよい。
で、いらなくなったときに、セッション配列の要素をunset()してやればいい。

この考え方は、ワンタイムチケットと同じ。

こっちも参照してね。

ワンタイムチケットでなくても、例えばログインフォームで一意の値を生成し、そいつをフォーム間で引き回せば、同じことができる。

ただし、ログインフォームで生成した一意の値が仮に悪意の第3者に漏れた場合、何をされるかわからないので、できれば、一定間隔で再生成する仕組みを考えた方がいい。

0 件のコメント:

コメントを投稿

Toとccの使い分け

 入社3年目の女性社員がメールを書いていた。 Toに10人ぐらい入っていた。 メール本文の宛名は2名。 「このメールは、Toに宛名の2名、あとはccに入れて送るのが基本」 って教えたけど 「え、Outlookでアドレスグループ作って宛名に入れると、全部展開されてこうなるんですけど...