管理单个密钥的ASP.NET会话超时

时间:2012-12-31 16:58:56

标签: c# asp.net session

我想以不同的方式管理密钥的超时时间。

有可能吗?

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

我如何处理这个问题?

2 个答案:

答案 0 :(得分: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所说,您描述的功能可能是缓存而不是会话问题。

答案 1 :(得分:0)

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

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

如果您以某种方式为密钥添加某种唯一标识符(仍然可以将用户ID添加到每个密钥之前),您仍然可以使用缓存来执行此操作,但是您仍然需要思考关于这种方法的可扩展性。