C# 如何在asp.net/c中重现丢失的会话?

C# 如何在asp.net/c中重现丢失的会话?,c#,asp.net,C#,Asp.net,我的问题是,有时我的会话会随机丢失,而有时它会工作 现在的问题是,是否有可能重现会话(我的会话是当前登录的用户)。我想也许我需要在我的母版页中更改一些东西,我现在正在检查会话是否失败,还有其他的东西吗 代码: Global.asax void Session_Start(object sender, EventArgs e) { // Code that runs when a new session is started if (HttpContext.Cu

我的问题是,有时我的会话会随机丢失,而有时它会工作

现在的问题是,是否有可能重现会话(我的会话是当前登录的用户)。我想也许我需要在我的母版页中更改一些东西,我现在正在检查会话是否失败,还有其他的东西吗

代码:

Global.asax

  void Session_Start(object sender, EventArgs e) {
        // Code that runs when a new session is started
        if (HttpContext.Current.User != null && HttpContext.Current.User is HtUser)
        {

            HtUser user = (HtUser)HttpContext.Current.User;
            Session["UserId"] = user.UserId;
            if (user.HtDepartments.Any() && user.HtDepartments.SingleOrDefault().HtBusinessUnit != null)
            {
                int BusinessUnitId = user.HtDepartments.First().HtBusinessUnit.BusinessUnitId;
                Session["BusinessUnnitId"] = BusinessUnitId;
            }
在这里您可以看到会话的代码

如果你还需要什么,请告诉我


谢谢你的帮助和快速回答

如果我理解正确,用户在会话过期(超时)时会丢失会话

为了防止这种情况发生,您可以在cookie中存储额外的密钥(即每个用户的用户\u id和唯一\u散列),然后在global.asax文件中编写一个方法,该方法将触发每个页面加载,并检查会话是否过期。若是这样,该方法将通过对照数据库检查cookie密钥来恢复会话

global.asax中的示例代码:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        // Restore session if session is lost but cookie is not
        // HttpContext.Current.Session["user_id"] == null &&
        if (HttpContext.Current.Request.Cookies["hash"] != null)
        {
            // do your job here
            RestoreSessionMethod();
        }
    }
}

例如,如果将会话状态保留在内存中,而不是SQL Server中,则可以打开页面执行在会话中存储数据的操作,然后保持浏览器打开并更改web.config文件或从命令行do iisreset.exe更改


这将从内存中刷新会话状态数据,并模拟会话状态的丢失

您可以使用
会话。放弃
方法


链接:

你说的重现会话是什么意思?@nunesspascal如果会话丢失,我想将aktuell登录用户作为会话返回,你知道是什么原因导致会话丢失;i、 e.是否超时,是否使用多台服务器(例如,会话在服务器a上创建,但下一个请求转到服务器B),是否使用查询字符串标识会话,从而在清除查询字符串时丢失对会话的引用,还是别的?你试过退出proc会话吗?@Mingebag会话通常不会丢失,它们会超时并被销毁。如果它们不存在,您就不能将它们返回给用户。您可能有一些示例?基本上,我使用上面的方法来恢复会话,即使在浏览器选项卡关闭后,用户也不需要每次登录。如果有帮助,请标记为答案或投票。谢谢我从来没有听说过如何在SQL server中保持会话您可能有一个解决方案的示例?我没有说您应该这样做,只是提到了它的可能性。您可以在此处阅读更多信息:如何:配置SQL Server以存储ASP.NET会话状态
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    if (HttpContext.Current.Session != null)
    {
        // Restore session if session is lost but cookie is not
        // HttpContext.Current.Session["user_id"] == null &&
        if (HttpContext.Current.Request.Cookies["hash"] != null)
        {
            // do your job here
            RestoreSessionMethod();
        }
    }
}