日期:2014-05-17  浏览次数:20436 次

asp.net cache是否可以取代cookies ,求大神指点??
我发现cache虽然是存在服务器端的,但是 cache确实基于用户的,那么cache可以取代cookies吗??为什么??例如:登录后,将userid,username存到cache中;
另外我现在在开放微信项目,微信中把客户端的cookies禁用了,我想到了cache;
但是发现一个很严重的问题:cache不是基于用户的吗,为什么,别的用户经常可以获取到另外一个用户的cache呢??

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。


你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的
 我是不是理解错了,sessionid是存在服务器端的cookies中么


应该这么说,不管客户端是否禁用cookie,服务端的Session都是在其作用的,但因为客户端禁用了cookie,服务端无法辨认当前访问者是谁,这时候它就会认为是一个全新的访问而重新分配一个sessionid给当前访问者
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Quote: 引用:

你应该说Session是基于cookie的,因为服务器需要辨认当前访问是谁,你可以在cookie中看到有一个ASP.NET_SessionId,如果不用cookie,那你就要通过其它方法来确认当前访问用户到底是谁,而NET本身支持非cookie,方法就是将SessionId直接镶入到url中,但这其实非常蛋疼,他破坏了url的正确性。。。。


你的意思是 如果客户端禁用了cookies,那么session也会失效,是这样吗??因为sessionid也是存在cookie中的
 我是不是理解错了,sessionid是存在服务器端的cookies中么


应该这么说,不管客户端是否禁用cookie,服务端的Session都是在其作用的,但因为客户端禁用了cookie,服务端无法辨认当前访问者是谁,这时候它就会认为是一个全新的访问而重新分配一个sessionid给当前访问者

_____________________________________________________________________
客户端只负责保存相应网站的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自动加上的,不会影响以前正常的连接。


这个就是我在2楼说到得url镶入,至少我认为它非常蛋疼,而且这样会导致一些额外的异常,就以你的http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx为例子,假定我要判断当前页是不是/MyTestApplication/default.aspx,这时候通过Request.Url获取的就是/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx,而不是你期望的/MyTestApplication/default.aspx
treeview节点有关问题