ASP.netのセッション管理
仕事でASP.net使うことになったのでSessionのお勉強中。
この本を参考にしてこんなコードを書いた。
public partial class session : System.Web.UI.Page { protected const string KEY_STRING = "KEY"; protected void Page_Load(object sender, EventArgs e) { //明示的にSession[<KEY_STRING>]へ値をセットしないと //新たなセッションIDが発行され続ける if (!IsPostBack) { Session[KEY_STRING] = 1; } else { Session[KEY_STRING] = Convert.ToInt32(Session[KEY_STRING]) + 1; } lblSession.Text = string.Format("SESSION_ID={0}<br />{1}回目", Session.SessionID, Session[KEY_STRING]); } protected void Button1_Click(object sender, EventArgs e) { //セッション解放 Session.Abandon(); } }
セッション変数の代入・参照・削除までは想定通り動くが、
セッション解放を解放した後もなぜか同じセッションIDが発行され続けてしまう。
少し調べてみたところ、どうやらASP.netのSessionは新たなセッションIDを発行する機能を持たないようだ。
参考:ASP.NETで忘れずにやっておくべきこと(2) セッションハイジャック対策 - 熱燗ロックのブログ
ASP.NET でセッション ID が再利用されるしくみと理由について
この問題の対策として、セッションCookieを以下のように消してしまう。
protected void Button1_Click(object sender, EventArgs e) { //セッション解放 Session.Abandon(); //セッションCookieを消す Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "")); }
これで、解放後に新たなセッションIDが発行されるようになった!
ヨカッタヨカッタ……と思っていたら、まだ問題が残っているらしい。
参考:http://d.hatena.ne.jp/teracc/20100424#1272092128
なんだかなぁ。
絶対現場主義VisualC#実践講座 Webアプリケーション編―開発の現場から生まれた実践テクニック&TIPS集
- 作者: 丸岡孝司
- 出版社/メーカー: ラトルズ
- 発売日: 2009/07/01
- メディア: 単行本
- 購入: 1人 クリック: 6回
- この商品を含むブログ (1件) を見る