昨天被问到了一些Cookie和Session的知识,回答了一部分,有一部分没有回答出来。今天上午特地查了一些资料,现在把找到的一些好的资料,总结出来,分享一下。
先来说一些cookie和session的基础知识。
cookie是保存在客户端的,保存少量信息,明文,经常用来保存用户id之类的信息,常见场景就是登录时候的“记住我”。不推荐保存敏感信息。
session是会话级的,保存在服务端,每个用户是唯一的,可以用来实现购物车之类的,需要在服务端保存当前用户会话的上下文信息的需求。可以保存在服务器的内存中,不能跨服务器;可以保存在数据库中。
上面是一些零星的知识点。其实还有很多,例如cookie中的sessionid,session还可以用状态服务器保存,这样可以用专用的服务器保存session。cookie中的内容是字符串类型的,session中的内容是object类型的,session中的内容获取之后需要类型转换,转换成所需要的类型。
在ASP.NET中,可以在web.config文件中进行配置。
- <configuration>
- <system.web>
- <sessionState mode="InProc"
- timeout="20"
- cookieless="true"
- stateConnectionString="tcpip=localhost:42424"
- sqlConnectionString=""
- />
- </system.web>
- </configuration>
关于配置节中的参数信息,可以查看 ASP.NET Session 状态的存储 ,讲得比较详细,还有找到了细说Cookie 这样一篇文章,感觉讲得也比较详细。
问题有两个。
1 客户端禁用cookie之后,session还能用吗?
2 cookie是如何在客户端和服务端传递的,具体的传递过程。
回答。
1 客户端禁用cookie之后,session还能用吗?
禁用cookie之后,也可以使用session。
Session的状态存储在两个地方,分别是客户端和服务端。客户端保存SessionID,Session信息保存在服务端。客户端的SessionID是保存在Cookie中的,如果浏览器禁用cookie,那么就不能使用session的好处了。
其实sessionid还可以通过url传递,还可以通过form传递,可以自定义来实现的。
在ASP.NET中,session有两种存储方式:cookie和cookieless。也就是说禁用cookie也可以使用session。配置为cookieless=true之后,可以选择将session存储在状态服务中,或者存储在SQL Server中。具体的做法可以看一下最后的参考文献。
2 cookie是如何在客户端和服务端传递的,具体的传递过程。
cookie在客户端和服务器端的传递是通过请求和响应的头来传递的。
从客户端到服务器端传递cookie,是在request的header中有一个cookie,里面就是传递的内容。
从服务器端到客户端传递cookie,是在response的header中有一个set-cookie,里面就是通过后台代码设置的cookie的内容。
这可以通过很多的抓包工具来查看,例如fiddler,httpwatch,firebug。
参考文献
本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/998456,如需转载请自行联系原作者