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 

原文地址:https://www.cnblogs.com/aaa6818162/p/2041480.html