C# 如何在asp.net/c中重现丢失的会话?
我的问题是,有时我的会话会随机丢失,而有时它会工作 现在的问题是,是否有可能重现会话(我的会话是当前登录的用户)。我想也许我需要在我的母版页中更改一些东西,我现在正在检查会话是否失败,还有其他的东西吗 代码: Global.asaxC# 如何在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
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();
}
}
}