cookies,session,viewstate浅析
最近,整理了一下这三者的区别
先看viewstate,视图状态
asp.net中用 from runat="server" 时候加了隐藏域
<input type="hidden" name="__VIEWSTATE" value="">
页面中的控件状态和页面的其他信息,在页面提交时候提交到服务器段,asp.net对其进行解码,然后在输出页面时候在还原信息到页面
简单来说,viewstate就是把页面及页面控件信息保存到一个隐藏域中,值得注意的是:
viewstate并不保存所有类型的数据,只支持string,int ,bool,arraylist,array,hashtable以及一些自定义的类型,viewstate只存在于当前页面
使用viewstate会增加页面的输出量,占用带宽,因为隐藏域在页面中,也存在安全隐患,用户可以通过查看源码看到viewstate中的信息
关于viewstate的安全问题,.net提供防篡改和加密两种方式
其次,谈谈session,会话
session是一种服务器端机制,服务器使用一种类似于散列表(数据结构中有详细介绍)的方式保存信息
当程序为某个客户端请求创建一个session时候,首先服务器端首先检查客户端请求是否包含sessionId,如果存在,按照session Id取得对应内容
如果客户端不包含session Id,则服务器端创建一个,分配给客户端请求,session Id保存在客户端,在会话结束之前,session值保存在服务器内存中
大量使用,会增加服务器压力,可以跨页面访问,默认有效期是20分钟
viewstate不占用服务器资源,当前页面永不过期
session 在客户端禁用cookies时候无法使用
这时候可以通过URL重写的方式实现session
在url中添加.jsessionid=xxxxx参数部分,服务器会从url中得到.jsessionid参数作为session_id
最后,说一下cookies
cookie保存在客户端,需要打开客户端cookie功能
cookie的内容主要包括:名字,值,过期时间,路径和域。
cookie如果不设置过期时间,在页面关闭是自动过期
设置过期时间,cookie则保存在用户硬盘中,关闭页面重新打开,不会过期,直到超过设置的过期时间才失效,可以跨页面访问cookie