0

私のホスティング環境では、セッションのタイムアウトが非常に短く、2 秒になることもあり、タイムアウトします。

セッションが null でカウントが 0 でない限り、ユーザーが引き続き Web サイトを使用すると、セッションはリセットされます。

セッションは 20 分後にタイムアウトし、ユーザーをログイン ページにリダイレクトする必要があります。

このコードは以下のとおりです。

protected override void OnInit(EventArgs e)
{
    if (this.Session != null && this.Session.Count > 0)
    {
        string email = (string)this.Session["Email"];
        int practiceId = (int)this.Session["PracticeId"];
        int practitionerId = (int)this.Session["PractitionerId"];

        this.ClientScript.RegisterHiddenField("loggedInUserName", email);
        this.ClientScript.RegisterHiddenField("practiceId", practiceId.ToString());
        this.ClientScript.RegisterHiddenField("practitionerId", practitionerId.ToString());
    }
    else
    {    
        this.Session.Abandon();
        Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));
        Response.Redirect("~/Default.aspx");    
    }

    base.OnInit(e);
}

セッションタイムアウトが非常に短い理由を知っている人はいますか? 私のサイトを使用しているとき、タイムアウトなしで 2 ~ 5 分間動き回ることができ、それ以外の時間は 10 秒でタイムアウトになります。セッションが失われる原因は何ですか?セッションの損失を回避またはテストする方法はありますか?

前もって感謝します。

4

1 に答える 1

0

ページの init 関数をオーバーライドしていると思いますが、ページが読み込まれるたびにセッションを放棄すると、解決するよりも多くの問題が発生する可能性があります。マスター ページ内のセッションの存在を確認します。

protected void Page_Init(object sender, EventArgs e)
{
    if (!HttpContext.Current.User.Identity.IsAuthenticated)
    {
        // user is not logged in
        string ReturnUrl = HttpContext.Current.Request.Url.PathAndQuery;
        string RedirectUrl = "/Login.aspx";
        if (!String.IsNullOrEmpty(ReturnUrl))
        {
            RedirectUrl += "?ReturnUrl=" + Server.UrlEncode(ReturnUrl);
        }
        Response.Redirect(RedirectUrl);
    }
}

これがマスター ページにある場合、ユーザーをログイン ページにリダイレクトする各要求 (マスターから継承する aspx ページに対して行われる) をチェックします。

アプリがアプリケーション プールを共有している場合、Cookie ID を別のアプリケーションと共有している可能性があります。

<authentication mode="Forms">
    <forms loginUrl="~/Login.aspx" timeout="60" name="MY_COOOKIE_NAME" slidingExpiration="true" />
</authentication>
<sessionState timeout="60" />

MY COOKIE NAME は、アプリが使用する Cookie を識別します。他のアプリにはデフォルトの Cookie 名がある可能性があるため、セッションは明らかに認証されていますが、別のアプリによって上書きされているため、アプリに属していません。スライド有効期限は、ページにアクセスするたびにセッション時間が延長されることを意味します。

また、machineKey 構成要素が存在することを確認してください。これにより、セッションがより安定しました。

<machineKey 
validationKey="random_validation_key" 
decryptionKey="random_decryption_key" 
validation="SHA1" decryption="AES" />
于 2013-09-16T16:37:35.403 に答える