私は何かを追跡し、セッションIDをそのオブジェクトのキーとして使用しようとしています
ただし、2〜3の要求ごとに変更されるSessionIDは同じままではありませんか?
HttpContext.Session.SessionID
私が使用しているコードです。
MVCがなくてもそれが起こるのを見てきました。記憶が正しければ、ASP.NETは、Session変数に何かを配置するまで新しいセッションIDを割り当て続けます。
Global.asax.cs
内でSessionオブジェクトを初期化する必要があります。
void Session_Start(object sender, EventArgs e)
{
HttpContext.Current.Session.Add("__MyAppSession", string.Empty);
}
この方法では、ブラウザウィンドウを閉じない限り、セッションは変更されません。
私は.NET MVCカートアプリケーションに取り組んでおり、追加しました
Session["myVar"] = "1234";
default.aspx.csコードにあるPage_Loadメソッドに追加します。私も追加しました
<%= this.Session.SessionID %>
site.Masterフッターへ。次に、アプリを再構築し、アプリのさまざまなページを参照しました。フッターには、すべてのページに同じセッションIDが期待どおりに表示されます。
見ると、セッションID Cookieはサーバーで使用されない限り、ブラウザーに送信されません。
そのため、ページが往復すると、現在のセッションID Cookieがないため、新しいセッションIDが作成されるため、ランダムになります。
これは理にかなっていますが、セッションが使用されていない場合にアプリをセッションに結び付けるのはなぜですか?
TempDataを使用して何かを追跡します。
ASP.NET Webフォームを使用して同じ問題が発生していました。ソリューションにglobal.asax
ファイルを追加して修正する必要がありました。
上記の@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
Web.configにマシンキーを追加してみてください。
オンラインキージェネレータ: http://aspnetresources.com/tools/keycreator.aspx サーバーはクライアントのマシンキーをリセットし、数分ごとに新しいセッションIDでマシンキーを生成しているようです、必要以上に低い。それがバグか機能かわからない:)
また、セッション状態のタイムアウトを増やすことができます。これはデフォルトで20分だと思います。