質問編集履歴
3
例外が発生したコードとセッション管理がInProcモードであることを追加しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
3
|
ASP.NET MVC5を使用してWebシステムを作成しています。質問はセッションタイムアウトの処理方法です。
|
4
|
-
|
4
|
+
セッション管理はInProcモードです。
|
5
5
|
セッションタイムアウトはデフォルトの20分です。
|
6
6
|
セッションタイムアウトのチェックはアクションフィルター(OnActionExecuting)を使用しています。アクションフィルターは、セッションタイムアウトが発生すると、強制的にセッションタイムアウト画面に遷移します。このため、セッションタイムアウトが発生すると、URLに示すControllerのアクションメソッドには制御は移りません。
|
7
7
|
|
@@ -42,7 +42,42 @@
|
|
42
42
|
}
|
43
43
|
}
|
44
44
|
```
|
45
|
+
### エラーが発生したコード
|
45
46
|
|
47
|
+
```
|
48
|
+
public ActionResult RegisterCommon(DateTime displayDay)
|
49
|
+
{
|
50
|
+
|
51
|
+
// 担当を自由に変更できる期間は2週間前まで
|
52
|
+
var timeLimitDay = displayDay.AddDays(-14);
|
53
|
+
// 本日
|
54
|
+
var today = DateTime.Now.ToUniversalTime().AddHours(9).Date;
|
55
|
+
// ユーザのIDを読み取る
|
56
|
+
var membershipId = (string)Session["MEMBERSHIP_ID"];
|
57
|
+
// 代行処理の場合、代行される人のIDを設定
|
58
|
+
if ((String)Session["SUBSTITUTED_ID"] != null)
|
59
|
+
{
|
60
|
+
membershipId = (string)Session["SUBSTITUTED_ID"];
|
61
|
+
}
|
62
|
+
// 事務局か?
|
63
|
+
var isAdministrator = false;
|
64
|
+
if ((bool)Session["ADMINISTRATOR"]) <<<--ここで例外が発生
|
65
|
+
isAdministrator = true;
|
66
|
+
|
67
|
+
// 指定日の担当登録を全て読み取る
|
68
|
+
var tantoItemsInDay = new List<Tanto>();
|
69
|
+
tantoItemsInDay = db.TantoTbl
|
70
|
+
.Where(item => item.Date == displayDay)
|
71
|
+
.ToList();
|
72
|
+
|
73
|
+
・・・・・・・
|
74
|
+
|
75
|
+
return View("Register", model);
|
76
|
+
}
|
77
|
+
|
78
|
+
```
|
79
|
+
|
80
|
+
|
46
81
|
### 試したこと
|
47
82
|
|
48
83
|
エラーが発生しているControllerアクションメソッドでセッションタイムアウトを発生させて確認しましたが、正しくセッションタイムアウトを認識し、Null参照エラーは発生しません。
|
2
stackOverflowに掲載されたコードへのリンクを付けました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -47,8 +47,7 @@
|
|
47
47
|
|
48
48
|
エラーが発生しているControllerアクションメソッドでセッションタイムアウトを発生させて確認しましたが、正しくセッションタイムアウトを認識し、Null参照エラーは発生しません。
|
49
49
|
疑わしいのは、セッションタイムアウト判定アルゴリズムと睨んでいるのですが、ASP.NETにおけるセッションタイムアウト処理の情報が少なく、悩んでいます。
|
50
|
-
なお、使用しているセッションタイムアウト判定アルゴリズムはstackOverflowに掲載されていたコードを使っています。
|
51
|
-
https://stackoverflow.com/questions/42150933/asp-net-sessionid-cookie-behavior-explanation
|
50
|
+
なお、使用しているセッションタイムアウト判定アルゴリズムは[stackOverflowに掲載されていたコード](https://stackoverflow.com/questions/42150933/asp-net-sessionid-cookie-behavior-explanation)を使っています。
|
52
51
|
|
53
52
|
### 補足情報(FW/ツールのバージョンなど)
|
54
53
|
|
1
以下を変更しています。(1)ソースコードをバッククオートで囲み、インデントを付けました。(2)参照したコードのURLを記載しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
### 該当のソースコード
|
16
16
|
アクションフィルタのコードです。
|
17
17
|
|
18
|
-
public class SessionExpireFilterAttribute :ActionFilterAttribute
|
18
|
+
``` public class SessionExpireFilterAttribute :ActionFilterAttribute
|
19
19
|
{
|
20
20
|
public override void OnActionExecuting(ActionExecutingContext filterContext)
|
21
21
|
{
|
@@ -41,15 +41,15 @@
|
|
41
41
|
|
42
42
|
}
|
43
43
|
}
|
44
|
+
```
|
44
45
|
|
45
|
-
|
46
46
|
### 試したこと
|
47
47
|
|
48
48
|
エラーが発生しているControllerアクションメソッドでセッションタイムアウトを発生させて確認しましたが、正しくセッションタイムアウトを認識し、Null参照エラーは発生しません。
|
49
49
|
疑わしいのは、セッションタイムアウト判定アルゴリズムと睨んでいるのですが、ASP.NETにおけるセッションタイムアウト処理の情報が少なく、悩んでいます。
|
50
50
|
なお、使用しているセッションタイムアウト判定アルゴリズムはstackOverflowに掲載されていたコードを使っています。
|
51
|
+
https://stackoverflow.com/questions/42150933/asp-net-sessionid-cookie-behavior-explanation
|
51
52
|
|
52
|
-
|
53
53
|
### 補足情報(FW/ツールのバージョンなど)
|
54
54
|
|
55
55
|
ここにより詳細な情報を記載してください。
|