記事一覧

セッションIDを変更する方法 | asp.net


前回の「複数のWebサイトを別セッションで管理する方法」に引き続き、今回も asp.net のセッション管理方法の一つで セッションIDを変更する方法をご紹介いたします。
セッションIDはデフォルトでは24文字の英数字でランダムに Cookie に埋め込まれます。Cookie 自体の名称を変更する方法については前回の記事でご紹介いたしましたが、ID自体の変更は今回の記事でご紹介していきます。


aspnet_sessionid_02.png



前提条件
・Windows 7 Professional 以降 / Windows Server 2008 R2 以降
・Visual Studio 2010 Professional 以降
・VB.NET
・.Net Framework 4.0 以降



1.実装方法

System.Web.SessionState.SessionIDManager クラスを継承した派生クラスを作成します。作成するSessionIDは固定値&GUIDで作成します。GUIDのみで作成しても問題ありませんが、複数のWebサイトを運営していると目視での識別が困難になりますので、Webサイト特有の固定値を付属させています。また、GUIDでなくとも乱数の英数字24桁以上であればセキュリティは高くなります。

CustomSessionIDManager.vb
Imports System
Imports System.Web
Imports System.Web.SessionState

Namespace Models

Public Class CustomSessionIDManager
Inherits SessionIDManager

Const WebSiteName As String = "MyWebSite_"

Public Overrides Function CreateSessionID(context As HttpContext) As String
'Return MyBase.CreateSessionID(context)

Return WebSiteName & Guid.NewGuid().ToString()

End Function


Public Overrides Function Validate(id As String) As Boolean
'Return MyBase.Validate(id)

Try
Dim testGuid As Guid = New Guid(id.Replace(WebSiteName, ""))
If id = WebSiteName & testGuid.ToString() Then
Return True
End If
Catch
'idの検査でエラーの場合はFalseとなるように
End Try

Return False
End Function

End Class

End Namespace


参考URL
https://msdn.microsoft.com/ja-jp/library/system.web.sessionstate.sessionidmanager.createsessionid(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#



2.Web.config

次に Web.config に sessionIDManagerType を追加し、ルート名前空間.Namespace.派生クラス名, プロジェクト名 の順に記載します。
詳しい記載例は、前回の記事「複数のWebサイトを別セッションで管理する方法」にてご紹介しておりますので、ご参考ください。



3.動作確認

Webサイトを実行し、Chrome でF12を押下し、Application > Cookie から現在有効なセッションIDとその値が確認できます。セッションIDの値がデフォルトの英数字24桁とは変更されていて、CustomSessionIDManager で指定した値に変更になっています。

aspnet_sessionid_01.png



4.再ログイン時の考慮

ログアウト&ログインしてもデフォルトの設定ではセッションIDは変更されません。同じセッションIDが使いまわしされます。再ログイン時にセッションIDを変更する場合は、ログアウトボタンのポストバックイベントまたはログアウトページのロードイベントに以下のコードを実装します。

Sub Signout_Click(ByVal sender As Object, ByVal e As EventArgs)

'セッションを破棄する
Session.Abandon()

'クッキーに保存されてるセッションIDを破棄する
'Dim cookie As New HttpCookie("ASP.NET_SessionId", "") 'デフォルトはこちら
Dim cookie As New HttpCookie("MyWebSite_SessionId", "") 'Web.configにて変更している場合
Response.Cookies.Add(cookie)

'フォーム認証のサインアウトを実行します。
FormsAuthentication.SignOut()

'ページを遷移します。
Response.Redirect("Logon.aspx")
End Sub







最後までお読みいただきありがとうございます。
いかがでしたでしょうか。他にも asp.net に関連する記事を投稿しておりますのでよろしければご参考くださいませ。



関連記事

コメント

コメントの投稿

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。