我想以与其他密钥不同的方式管理密钥的超时。
是否可以?
我的意思是,让我们考虑两个会话密钥:“ User
”和“ RedirectUrl
”。我想将我的“ User
”会话对象保留 1 小时,将“ RedirectUrl
”会话对象保留 1 分钟。
我该如何应对这个问题?
开箱即用,无法以您想要的方式使用 Session 类。您必须为此使用自己的解决方案。
Cache
确实有一种机制允许您在一定时间后使特定对象过期,但它可能不适合您的场景,因为Cache
它在所有会话中共享。
如果您以仍然可以区分用户的方式为键添加某种唯一标识符(例如,在每个键前添加用户 ID),您仍然可以使用 Cache 来执行此操作,但是您仍然必须考虑可伸缩性这种方法。
我建议将要过期的 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 所说,您所描述的功能可能是缓存而不是会话问题。