asp.net cache是否可以取代cookies ,求大神指点??

jzcldy 2013-12-02 10:09:54
我发现cache虽然是存在服务器端的,但是 cache确实基于用户的,那么cache可以取代cookies吗??为什么??例如:登录后,将userid,username存到cache中;
另外我现在在开放微信项目,微信中把客户端的cookies禁用了,我想到了cache;
但是发现一个很严重的问题:cache不是基于用户的吗,为什么,别的用户经常可以获取到另外一个用户的cache呢??
...全文
329 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzcldy 2013-12-02
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
[quote=引用 7 楼 jzcldy 的回复:] [quote=引用 6 楼 jzcldy 的回复:] [quote=引用 2 楼 starfd 的回复:] 你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的[/quote] 我是不是理解错了,sessionid是存在服务器端的cookies中么[/quote] 应该这么说,不管客户端是否禁用cookie,服务端的Session都是在其作用的,但因为客户端禁用了cookie,服务端无法辨认当前访问者是谁,这时候它就会认为是一个全新的访问而重新分配一个sessionid给当前访问者[/quote]------------受教了 多谢大神
jzcldy 2013-12-02
  • 打赏
  • 举报
回复
在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般 为20分钟) 单个用户 服务器端 Cookie 小量,简单的数据 可以根据需要设定 单个用户 客户端 Viewstate 小量,简单的数据 一个Web页面的生命期 单个用户 客户端 Cache 任意大小 可以根据需要设定 所有用户 服务器端 隐藏域 小量,简单的数据 一个Web页面的生命期 单个用户 客户端 查询字符串 小量,简单的数据 直到下次页面跳转请求 单个用户 客户端 Web.Config文件 不变或极少改变的小量数据 直到配置文件被更新 单个用户 服务器端 看来我搞错了,cache是针对所有用户的 不是针对单一用户的额 被误导了
  • 打赏
  • 举报
回复
引用 7 楼 jzcldy 的回复:
[quote=引用 6 楼 jzcldy 的回复:] [quote=引用 2 楼 starfd 的回复:] 你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的[/quote] 我是不是理解错了,sessionid是存在服务器端的cookies中么[/quote] 应该这么说,不管客户端是否禁用cookie,服务端的Session都是在其作用的,但因为客户端禁用了cookie,服务端无法辨认当前访问者是谁,这时候它就会认为是一个全新的访问而重新分配一个sessionid给当前访问者
jzcldy 2013-12-02
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
cookie是持久化的东西。比如说记住登录密码一个月。 你cache也记住一个月?
cache怎么 不可以啊 只要不过期就可以啊 ;问题是 cahce能不能保存单个用户的信息???是不是单用户的会话状态???怎么有的资料说是 单用户的会话状态 有的资料说 是公共的大家都可以访问??
  /// <summary>
        /// 获取数据缓存
        /// </summary>
        /// <param name="key">键</param>
        public static object Get(string key)
        {
            System.Web.Caching.Cache cache = HttpRuntime.Cache;
            return cache[key];
        }
        /// <summary>
        /// 设置数据缓存
        /// </summary>
        public static void Set(string key, object obj)
        {
            System.Web.Caching.Cache cache = HttpRuntime.Cache;
            cache.Insert(key, obj);
        }
如果我用cahce来实现cookies效果可以吗???例如: 每个用户登录后;我进行 Set("userid",userid); 这样可以吗???
jzcldy 2013-12-02
  • 打赏
  • 举报
回复
引用 6 楼 jzcldy 的回复:
[quote=引用 2 楼 starfd 的回复:] 你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的[/quote] 我是不是理解错了,sessionid是存在服务器端的cookies中么
jzcldy 2013-12-02
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的
qvbzyx 2013-12-02
  • 打赏
  • 举报
回复
一个是客户端的,一个是服务端的。虽然有些地方类似,但是无法相等的
threenewbee 2013-12-02
  • 打赏
  • 举报
回复
而且,cookie还有一个作用是跟踪用户状态。 比如一个用户,他今天访问你的网站,明天换了一个ip,你服务器怎么知道这个访问和昨天那个是一个人呢?
threenewbee 2013-12-02
  • 打赏
  • 举报
回复
cookie是持久化的东西。比如说记住登录密码一个月。 你cache也记住一个月?
  • 打赏
  • 举报
回复
你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
  • 打赏
  • 举报
回复
Cache基于客户???这什么意思啊???没看懂 Cache是公用的,跟Session没有关系的。。。。。 Session是基于访问的 Cache跟Application类似,不过Cache跟Application不同的地方在于,Cache是存在相关的过期或者依靠过期的机制,而Application就是相当于把东西直接常驻在内存中 以上是我的个人理解,如果有误,请原谅
ltcszk 2013-12-02
  • 打赏
  • 举报
回复
主要是为了解决web无状态 打开两个页面或者刷新一下页面,对于服务器来说就是两个完全无关的事件 服务器需要一个标识来确认,这两个页面来自一个用户。 那么为什么这个标识要存在cookie里呢? 因为cookie 能保存在客户端,而且每个请求都会向服务器发送该站点下所有保存的cookie
  • 打赏
  • 举报
回复
引用 13 楼 jzcldy 的回复:
[quote=引用 9 楼 starfd 的回复:] [quote=引用 7 楼 jzcldy 的回复:] [quote=引用 6 楼 jzcldy 的回复:] [quote=引用 2 楼 starfd 的回复:] 你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的[/quote] 我是不是理解错了,sessionid是存在服务器端的cookies中么[/quote] 应该这么说,不管客户端是否禁用cookie,服务端的Session都是在其作用的,但因为客户端禁用了cookie,服务端无法辨认当前访问者是谁,这时候它就会认为是一个全新的访问而重新分配一个sessionid给当前访问者[/quote] _____________________________________________________________________ 客户端只负责保存相应网站的SessionID,而其他的Session信息则保存在服务器端。在ASP中,客户端的SessionID实际是以Cookie的形式存储的。如果用户在浏览器的设置中选择了禁用Cookie,那末他也就无法享受Session的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在ASP.NET中客户端的Session信息存储方式分为:Cookie和Cookieless两种。   ASP.NET中,默认状态下,在客户端还是使用Cookie存储Session信息的。如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下:   找到当前Web应用程序的根目录,打开Web.Config文件,找到如下段落: <sessionState   mode="InProc"   stateConnectionString="tcpip=127.0.0.1:42424"   sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"   cookieless="false"   timeout="20" />   这段话中的cookieless="false"改为:cookieless="true",这样,客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。关闭当前的IE,打开一个新IE,重新访问刚才的Web应用程序,就会看到类似下面的样子: 其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.中黑体标出的就是客户端的Session ID。注意,这段信息是由IIS自动加上的,不会影响以前正常的连接。[/quote] 这个就是我在2楼说到得url镶入,至少我认为它非常蛋疼,而且这样会导致一些额外的异常,就以你的http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx为例子,假定我要判断当前页是不是/MyTestApplication/default.aspx,这时候通过Request.Url获取的就是/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx,而不是你期望的/MyTestApplication/default.aspx
jzcldy 2013-12-02
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
[quote=引用 7 楼 jzcldy 的回复:] [quote=引用 6 楼 jzcldy 的回复:] [quote=引用 2 楼 starfd 的回复:] 你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。
你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的[/quote] 我是不是理解错了,sessionid是存在服务器端的cookies中么[/quote] 应该这么说,不管客户端是否禁用cookie,服务端的Session都是在其作用的,但因为客户端禁用了cookie,服务端无法辨认当前访问者是谁,这时候它就会认为是一个全新的访问而重新分配一个sessionid给当前访问者[/quote] _____________________________________________________________________ 客户端只负责保存相应网站的SessionID,而其他的Session信息则保存在服务器端。在ASP中,客户端的SessionID实际是以Cookie的形式存储的。如果用户在浏览器的设置中选择了禁用Cookie,那末他也就无法享受Session的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在ASP.NET中客户端的Session信息存储方式分为:Cookie和Cookieless两种。   ASP.NET中,默认状态下,在客户端还是使用Cookie存储Session信息的。如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下:   找到当前Web应用程序的根目录,打开Web.Config文件,找到如下段落: <sessionState   mode="InProc"   stateConnectionString="tcpip=127.0.0.1:42424"   sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"   cookieless="false"   timeout="20" />   这段话中的cookieless="false"改为:cookieless="true",这样,客户端的Session信息就不再使用Cookie存储了,而是将其通过URL存储。关闭当前的IE,打开一个新IE,重新访问刚才的Web应用程序,就会看到类似下面的样子: 其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.中黑体标出的就是客户端的Session ID。注意,这段信息是由IIS自动加上的,不会影响以前正常的连接。
卧_槽 2013-12-02
  • 打赏
  • 举报
回复
禁用了cookies基本就只能看一点静态页面了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧