2

我想以与其他密钥不同的方式管理密钥的超时。

是否可以?

我的意思是,让我们考虑两个会话密钥:“ User”和“ RedirectUrl”。我想将我的“ User”会话对象保留 1 小时,将“ RedirectUrl”会话对象保留 1 分钟。

我该如何应对这个问题?

4

2 回答 2

1

开箱即用,无法以您想要的方式使用 Session 类。您必须为此使用自己的解决方案。

Cache确实有一种机制允许您在一定时间后使特定对象过期,但它可能不适合您的场景,因为Cache它在所有会话中共享。

如果您以仍然可以区分用户的方式为键添加某种唯一标识符(例如,在每个键前添加用户 ID),您仍然可以使用 Cache 来执行此操作,但是您仍然必须考虑可伸缩性这种方法。

于 2012-12-31T17:06:40.583 回答
1

我建议将要过期的 Session 值包装在另一个对象中:

[Serializable]
public class SessionUser
{
    public User User { get; set; }
    public DateTime Expires { get; set; }
}

[Serializable]
public class SessionRedirectUrl
{
    public Uri RedirectUrl { get; set; }
    public DateTime Expires { get; set; }
}

如果存在使每个会话值到期的机制,则无论如何您都需要逻辑来检查到期日期。

但是,正如 Icarus 所说,您所描述的功能可能是缓存而不是会话问题。

于 2012-12-31T18:00:05.430 回答