複数のインスタンスを使用して Web アプリケーションをスケールアウトできることは、Azure クラウドの最大の利点の 1 つです。Web ロール クラウド アプリケーションで複数の VM をサポートするために、Azure Redis Cache を実装しています。セッション状態を維持するために RedisSessionStateProvider プロバイダーを使用しています。以下は、web.config ファイル内のセッション管理の構成設定です。
<authentication mode="Forms">
<forms loginUrl="~/Login" slidingExpiration="true" timeout="20" defaultUrl="~/Default" />
</authentication>
<sessionState timeout="20" mode="Custom" customProvider="MySessionStateStore">
<providers>
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider"
host = "dummy.redis.cache.windows.net"
port = "6380"
accessKey = "dummysecretkey"
ssl = "true"
throwOnError = "true"
retryTimeoutInMilliseconds = "5000"
databaseId = "0"
applicationName = ""
connectionTimeoutInMilliseconds = "5000"
operationTimeoutInMilliseconds = "1000"
connectionString = ""/>
</providers>
問題は、ユーザーのポストバックでセッション タイムアウトが延長されないことです。ユーザーが午前 10 時にアプリケーションにログインすると、セッション データは午前 10 時 20 分に期限切れになります。ユーザーが午前 10 時 15 分にポストバックした場合、セッションは午前 10 時 35 分に期限切れになるはずですが、これは起こらず、午前 10 時 20 分に期限切れになります。
以下は、ログインボタンのクリックイベントのコードです
protected void Button1_Click(object sender, EventArgs e)
{
FormsAuthentication.SetAuthCookie(TextBox1.Text.Trim(), true);
ConnectionMultiplexer connection = ConnectionMultiplexer.Connec("dummy.redis.cache.windows.net,ssl=true,password=dummysecretkey");
IDatabase cache = connection.GetDatabase();
Session["UserName"] = TextBox1.Text;
Response.Redirect("Default.aspx");
}
スライディングモードでセッションタイムアウトを取得するために何をする必要があるか教えていただければ幸いです。よろしくお願いします、
HRヤダブ