web-dev-qa-db-ja.com

SessionIDがASP.NET MVCで変化し続けるのはなぜですか?

私は何かを追跡し、セッションIDをそのオブジェクトのキーとして使用しようとしています

ただし、2〜3の要求ごとに変更されるSessionIDは同じままではありませんか?

HttpContext.Session.SessionID

私が使用しているコードです。

45
dswatik

MVCがなくてもそれが起こるのを見てきました。記憶が正しければ、ASP.NETは、Session変数に何かを配置するまで新しいセッションIDを割り当て続けます。

49
Maxam

Global.asax.cs内でSessionオブジェクトを初期化する必要があります。

void Session_Start(object sender, EventArgs e)
{
    HttpContext.Current.Session.Add("__MyAppSession", string.Empty);
}

この方法では、ブラウザウィンドウを閉じない限り、セッションは変更されません。

25
jrojo

私は.NET MVCカートアプリケーションに取り組んでおり、追加しました

Session["myVar"] = "1234";

default.aspx.csコードにあるPage_Loadメソッドに追加します。私も追加しました

<%=  this.Session.SessionID %>

site.Masterフッターへ。次に、アプリを再構築し、アプリのさまざまなページを参照しました。フッターには、すべてのページに同じセッションIDが期待どおりに表示されます。

5
robnardo

見ると、セッションID Cookieはサーバーで使用されない限り、ブラウザーに送信されません。

そのため、ページが往復すると、現在のセッションID Cookieがないため、新しいセッションIDが作成されるため、ランダムになります。

これは理にかなっていますが、セッションが使用されていない場合にアプリをセッションに結び付けるのはなぜですか?

3
ScottEg

TempDataを使用して何かを追跡します。

2
MrJavaGuy

ASP.NET Webフォームを使用して同じ問題が発生していました。ソリューションにglobal.asaxファイルを追加して修正する必要がありました。

0
Flea

上記の@jrojoと@Maxamからの回答と、私が使用しているものをまとめます。

セッションストアとしてAWS DynamoDBを使用しています(質問の範囲外ですが、サンプルを提供します)。

NUGETでパッケージを追加:Install-Package AWS.SessionProvider

AppSettingsにキーを持つようにWeb.configを更新します。

<add key="AWSAccessKey" value="XXX" />
<add key="AWSSecretKey" value="YYY" />

System.webへのセッションプロバイダー:

<sessionState timeout="20"
              mode="Custom"
              customProvider="DynamoDBSessionStoreProvider">
  <providers>
    <add name="DynamoDBSessionStoreProvider"
      type="Amazon.SessionProvider.DynamoDBSessionStateStore, AWS.SessionProvider"
      AWSProfilesLocation=".aws/credentials"
      Table="ASP.NET_SessionState"
      Region="us-east-1"
      />
  </providers>
</sessionState>

セッション開始時にglobal.asaxのセッションに何かを追加します。

void Session_Start(object sender, EventArgs e) {
  HttpContext.Current.Session.Add("somethingToForceSessionIdToStick", string.Empty);
}

これを任意のページのカミソリに追加して確認します。そのページを更新してから、イグニートウィンドウを開き、別のセッションを表示します。

@HttpContext.Current.Session.SessionID

BobsYourUncle

0
sobelito

Web.configにマシンキーを追加してみてください。
オンラインキージェネレータ: http://aspnetresources.com/tools/keycreator.aspx サーバーはクライアントのマシンキーをリセットし、数分ごとに新しいセッションIDでマシンキーを生成しているようです、必要以上に低い。それがバグか機能かわからない:)
また、セッション状態のタイムアウトを増やすことができます。これはデフォルトで20分だと思います。

0
Hrvoje Hudo