我正在修复一个ASP.NET应用程序,该应用程序大量使用会话来跟踪每页数据。其中一个问题是会话在页面之间流血。
ViewState是一个更好的解决方案,除了:
所以我想:
有没有一种方法可以使部分会话数据到期?
答案 0 :(得分:2)
以下临时存储位置可用:
您可能想要检查缓存。如果您使用的是webfarm,它将无法使用,但您可以使用某种GUID作为映射回会话的密钥。
答案 1 :(得分:1)
我可能会这样做:
这样的事情(警告:航空代码。可能包含语法错误):
public class PageBase
: System.Web.UI.Page
{
protected overrides OnInit(System.EventArgs e) {
base.OnInit(e);
if(!this.IsPostBack) {
Guid requestToken = System.Guid.NewGuid();
ViewState["RequestToken"] = requestToken;
Session["PageSpecific" & requestToken.ToString()] = InitializePageSpecificState();
}
}
protected virtual object InitializePageSpecificState() {
return new GenericPageState();
}
//You can use generics to strongly type this, if you want to.
protected object PageSpecificState {
get {
return Session["PageSpecific" & ViewState["RequestToken"].ToString()];
}
}
}
答案 2 :(得分:0)
也许在每个页面上!IsPostBack或通过基页,您可以清空对与该页面无关的会话数据的所有引用。每次用户转到站点中的另一个页面时,这将“过期”数据。
如果用户离开站点或进入活动状态,那么在会话到期之前您无能为力,但在这种情况下,每个用户只能有一页会话数据。