0

我面临一个问题,因为我的用户在参加多项选择在线考试时退出频率。

我们在单个页面上实施了考试,并在用户选择相同的选项时将选项存储在视图状态中。在选择下一个问题页面时再次加载。有时 "If Session("User") = """ 结果为真,用户注销。

我在第一次页面加载时设置了会话

会话超时 = 340

在 web 配置文件中会话超时也是 2 小时。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Session("User") = "" Then
        Response.Redirect("Default.aspx")
    Else
        //Processing and updating view state.

请帮忙看看这个

4

3 回答 3

2

可能是 AppPool 被回收的原因。以下是造成这种情况的一些原因:

  1. 您的 sessionState 超时已过期
  2. 您更新您的 web.config 或其他导致 AppDomain 回收的文件类型
  3. IIS 中的 AppPool 回收
  4. 您使用大量文件更新您的站点,并且 ASP.NET 主动破坏您的 AppDomain 以重新编译和保留内存。
  5. 或者可能是任何文件或目录被删除。

参考:丢失会话状态

解决方案:使用 stateserver 而不是 InProc。

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"   cookieless="UseCookies" timeout="10" regenerateExpiredSessionId="true" />

http://msdn.microsoft.com/en-us/library/ms972429.aspx

于 2012-06-04T05:58:38.497 回答
0

在 web config 中增加会话超时值 525,600 分钟(1 年)。

http://msdn.microsoft.com/en-us/library/ms525473(v=vs.90).aspx

http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.80).aspx

于 2012-06-04T03:18:07.383 回答
0

我之前遇到过这个问题。请在您的解决方案中添加此代码。

 public int SessionLengthMinutes
    {
        get { return Session.Timeout; }
    }
    public string SessionExpireDestinationUrl
    {
        get { return "../Login.aspx"; }
    }
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        this.Controls.Add(new LiteralControl(
        String.Format("<meta http-equiv='refresh' content='{0};url={1}'>",
        SessionLengthMinutes * 60, SessionExpireDestinationUrl)));
    }

通过这个您可以检查您的页面何时从主页重定向到登录页面。然后我们可以进一步工作并解决问题。希望对你有效。

于 2012-06-04T06:14:52.363 回答