0

在我的托管环境中,我的会话超时非常短,有时甚至 2 秒,然后它们就会超时。

如果用户继续使用该网站,会话将被重置,除非 session = null 并且计数为 0。

会话应在 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 回答