如果我没看错,您似乎希望 ASP.NET 检测持久性身份验证 cookie 并重新建立该用户的最后一个会话状态。它不是那样工作的:身份验证 cookie 和 asp.net 会话是两个独立的东西,所以确实会有用户返回站点并通过持久 AuthCookie 通过身份验证的实例,但具有全新的(空)会话数据。
假设 AuthCookie 设置正确,您可以检测到用户已通过身份验证,User.Identity.IsAuthenticated不受 IIS 回收或会话过期的影响。用户名暴露在User.Identity.Name.
如果您需要在用户返回站点时重新初始化某些Session数据,则必须手动执行此操作。如果这确实是您要问的,那么在不了解您的应用程序的情况下很难回答,但请考虑 global.asax 中的Session_Start和Session_End事件。或者,您可以对会话对象进行空检查,并在它为空时重新填充(会话过期后),例如:
//get some user info from session or db if session is null
string preferredName;
if (User.Identity.IsAuthenticated)
{
object o = Session["preferredName"];
if (o == null)
{
preferredName = repository.GetUser(User.Identity.Name).PreferredName;
Session["preferredName"] = preferredName; //save to session so this isn't necessary next time
}
else
{
preferredName = (string)o;
}
}
else
{
preferredName = "anon";
}