日期:2014-05-18  浏览次数:20373 次

cache的过期时间与session
C# code

//定义cache过期时间

 TimeSpan SessTimeout = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);



 //第一次登陆的时候插入一个用户相关的cache值,

 HttpContext.Current.Cache.Insert(key, key, null, DateTime.MaxValue, SessTimeout, System.Web.Caching.CacheItemPriority.NotRemovable, null);


这个cache的过期时间会与session同时失效吗?
例如时间是20分钟,session的是最后一次活跃时间过后20分钟。那cache的过期时间是insert之后的20分钟过期,还是和session一样,最后一次活跃之后的20分钟过期??

------解决方案--------------------
两者是没有任何关系的
------解决方案--------------------
探讨

那有看到用cache做的单点登录。
也是这样的代码。怎么都说是一旦session过期,cache也过期?

------解决方案--------------------
比如系统内存好用比较多的时候就会自动清除 --> 比如系统内存耗用比较多的时候就会自动清除

我想你看到的所谓单点登录系统,不是很专业和谨慎,是靠臆断来编程的,质量没有保证。
------解决方案--------------------
探讨
两者是没有任何关系的

------解决方案--------------------
Cache不应该跟什么Session过期时间扯上联系。比如说你设置为24个小时,那么也可能会在10分钟之后缓存就被自动清除了。另外缓存就是缓存,它随时可以被清除,而你的程序不应把缓存当作一个可靠的保存数据的数据库那样来看待,当查询数据时发现缓存中没有数据时程序应该可以从数据中重新查询并且重新放入缓存里。

如果把缓存跟一个稳定可靠的数据持久化机制相提并论,这肯定是缺乏严谨的设计责任和高强度测试的。
------解决方案--------------------
既然设置了过期时间为DateTime.MaxValue,只要系统内存足够,就一直不会过期.
除非手动删除HttpContext.Current.Cache.Remove(yourCachKey)

session是对于每个用户单独的,会因为用户的操作而延长存活时间
cach是共享的~不会因为某个用户的操作而改变过期时间


个人理解~