标签:
最稳妥的传递方式就是URL传递(最好,简单、直接)
缺点:多页面每次都要存,不保密
不会一直在服务器端保持一个类的实例,只管处理一次,处理完事销毁。http协议是无状态的,不会记得上次和网页“发生了什么”,服务器不会记得上次给了浏览器什么,否则服务器压力太大,,浏览器需要记住这些值,下次再提交服务器的时候,就要把上次的值提交给服务器让他想起来。如果要知道上一次的状态,一个方法是对浏览器响应结束之前将状态信息保存到页面表单中(实现一下),下次页面再向服务器发出请求的时候带上这些状态信息,这样服务器就能根据这些状态信息还原上次的状态了
状态信息保存在隐藏字段中的缺点:加大网站的流量、降低访问速度、机密数据放到表单中会有数据欺骗等安全性问题。
通过URL传递状态 html页上
<form action="HttpNoZhuangTai.ashx" method="get"> <input type="submit" value="增加"> <input type="hidden" name="Count" value="$Model.Count"/> <p>$Model.Count</p> </form>
CS代码
int count=Convert.ToInt32(contex.Request["Count"]); count++; string html=CommonHelper.RenderHtml("HttpNoZhuangtai.htm",new{Count=count});
想自由传递、读取用Cookie,是可读可写的,但是只有网站自己能够读写,是存在本地电脑上的。浏览器会在后台通过报文字段方式向服务器发送Cookie,服务器返回数据除了普通的html数据外,还会返回修改的Cookie,浏览器把拿到的Cookie值更新本地浏览器的Cookie.Cookie是以键值对的形式存的
只有被点击的submit才能被发送到服务器
在服务器端控制Cookie案例:实现记住用户名的功能
设置的页面:Response.SetCookie(new HttpCookie("UserName",username));
读取值的页面:
HttpCookie cookie=context.Request.Cookies["Username"];
string value=cookie.value;
如果不设定Expires那么生命周期则是关闭浏览器则终止,否则“最多”到Expires的时候终止
如何设置Cookie生命周期
HttpCookie cookie1=new HttpCookie("Age","33"); cookie1.Expires=DateTime.Now.AddDays(1); context.Respinse.SetCookie(cookie1);
Cookie是可以被清除的,只能把可有可无的信息放到Cookies里,只能放100k。
Cookie的缺点:还不能存储过多信息,机密信息不能存。
Cookie无法跨不同的浏览器
案例,Cookies记住用户名
string login =context.Request["Login"]; if(string.IsNullOrEmpty(login)) { HttpCookie cookie=context.Request.Cookies["UserName"]; string username; if(cookie==null) { username=""; } else { username=cookie.Value;
服务器端Cookie
ASP.NET内置了Session机制,Session是服务器端的Cookie,普通HttpHandler要能操作Session,要实现IRequiresSessionState接口(当前网站的任何一个页面都能取到Session、Cookie)。Session有自动销毁机制,如果有一段时间内浏览器与服务器没有发生交互,Session会定时销毁。这也是为什么一段时间不操作,系统会自动退出。
//服务器保存Session context.Session["Username"]=username;
取出的时候
string username=(string)context.Session["UserName"];
标签:
原文地址:http://www.cnblogs.com/wangxuxu7912/p/4970352.html