fc2ブログ

記事一覧

セッション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 に関連する記事を投稿しておりますのでよろしければご参考くださいませ。



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


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

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Catalina 10.15 / Mojave 10.14 / High Sierra 10.13 / Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
【データベース】
Oracle 10g/9i
SQLServer 2016/2008R2/2005/2000
SQLAnywhere 16/11/8
【BI/レポートツール】
Cognos ReportNet (IBM)
Microsoft PowerBI
ActiveReport (GrapeCity)
CrystalReport
【OCX関連】
GrapeCity InputMan SPREAD MultiRow GridView
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS jQuery IIS6/7 apache2

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