细说系列笔记
Fish Li的细说系列看了好多篇,每次看懂了,然后就忘了,所以在这里有必要对看过的文章做个笔记,写一些自己的理解,这样才不至于看完就忘,提高学习效率。
首先谈谈对"细说Forms(表单)"的理解。
原文地址:http://www.cnblogs.com/fish-li/archive/2011/07/17/2108884.html
其实准备的说,这篇文章应该叫做“细说表单提交”,因为整篇文章是围绕“怎么样提交表单?”这个主题来展开的。
主要内容包括以下几点:(1)简单表单提交(2)成功控件(3)多提交按钮表单提交(4)多文件表单(5)Ajax提交整个表单(6)Ajax提交部分表单(7)模拟浏览器提交
我又将这些主题分为三类:(1)(2)表单提交基础(3)(4)form.enctype属性(5)(6)Ajax提交表单(7)C# 模拟浏览器题叫表单。
表单提交基础三要素:Form中的Action和Method属性,以及submit按钮。
成功控件的规则:1. 控件不能是【禁用】状态,即指定【disabled="disabled"】。即:禁用的控件将不是成功控件。 2. 如果一个表单包含了多个提交按键,那么仅当用户点击的那个提交按钮才算是成功控件。 3. 对于checkbox控件来说,只有被用户勾选的才算是成功控件。 4. 对于radio button来说,只有被用户勾选的才算是成功控件。 5. 对于select控件来说,所有被选择的选项都做为成功控件,name由select控件提供。 6. 对于file上传文件控件来说,如果它包含了选择的文件,那么它将是一个成功控件。 此外,浏览器不会考虑Reset按钮以及OBJECT元素。
总结下成功控件规则:非禁用,以勾选(checkbox,radio button),已点击(submit)。
注意: 1. 对于checkbox, radio button来说,如果它们被确认为成功控件,但没有为控件指定value属性, 那么在表单提交时,将会以"on"做为它们的value
form.enctype属性:application/x-www-form-urlencoded(默认值)和multipart/form-data
HttpFileCollection files = context.Request.Files;
foreach( string key in files.AllKeys ) {
HttpPostedFile file = files[key];
if( string.IsNullOrEmpty(file.FileName) == false )
file.SaveAs(context.Server.MapPath("~/App_Data/") + file.FileName)
Ajax提交表单:Jquery.ajaxForm 和Jquery.ajax方法。
$(function(){
$('form').ajaxForm({
success: function(responseText){
alert(responseText);
}
});
});
$("#btnId").click(function(){
$.ajax({
url: "Handler1.ashx", type: "POST",
data: $('#divCustomerInfo :text').fieldSerialize(),
success: function(responseText){
alert(responseText);
}
});
return false;
});
原文地址:http://www.cnblogs.com/fish-li/archive/2011/07/17/2108884.html
再谈谈对“Cookie”的理解。
原文地址:http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html
读了这篇文章,我将从以下几个方面来解读cookie。
(1)浏览器中的cookie。
(2)asp.net对cookie的实现。
(3)asp.net中哪些特性需要cookie的支持。
浏览器中的cookie
1.什么是cookie:存在浏览器中的一段文本,随着http请求在client和web服务端来回传递。
2.为什么要cookie:http是无状态的,web server需要一个信息来区分请求来自不同的client端,这个信息就存放在cookie里。
3.Cookie 的限制。 大多数浏览器支持最大为 4096 字节的 Cookie。由于这限制了 Cookie 的大小,最好用 Cookie 来存储少量数据,或者存储用户 ID 之类的标识符。用户 ID 随后便可用于标识用户,以及从数据库或其他数据源中读取用户信息。 浏览器还限制站点可以在用户计算机上存储的 Cookie 的数量。大多数浏览器只允许每个站点存储 20 个 Cookie;如果试图存储更多 Cookie,则最旧的 Cookie 便会被丢弃。有些浏览器还会对它们将接受的来自所有站点的 Cookie 总数作出绝对限制,通常为 300 个。
4.Javascript对cookie的支持:document.cookie来读写cookie的。document.cookie的格式是name1=value1;name2=value2;可以部分写,全部读。具体参见原文的“Js读取cookie”。
asp.net对cookie的实现。
(1)可以通过Response.Cookies来添加和删除cookie,response流发回浏览器,从response流中读cookie值,如果发现本地的cookie过期,浏览器就删掉改cookie,如果发现response流中有新的cookie,就将该cookie添加到浏览器中保存起来。
(2)request.cookies和response.cookies的关系。从设计的角度来看,服务端cookie中添加一个cookie,那么对应的应该在request的cookie中也添加一个对应的cookie,asp.net就是这样做的。
asp.net中哪些特性需要cookie的支持。
(1)sessionid就存在cookie里面,可以用fiddler查看。
(2)基于表单的身份严重中,用到就是cookie。
细说表单验证:基于Form的身份验证包括两步:认证和授权。
认证:1. 检查用户提交的登录名和密码是否正确。
2. 根据登录名创建一个FormsAuthenticationTicket对象。
3. 调用FormsAuthentication.Encrypt()加密。
4. 根据加密结果创建登录Cookie,并写入Response。
每次请求时的(认证)处理过程如下:
1. FormsAuthenticationModule尝试读取登录Cookie。
2. 从Cookie中解析出FormsAuthenticationTicket对象。过期的对象将被忽略。
3. 根据FormsAuthenticationTicket对象构造FormsIdentity对象并设置HttpContext.User
4. UrlAuthorizationModule执行授权检查。
下面是对缓存的理解:
1.缓存特点:线程安全,会根据CPU的个数创建多个缓存容器,尽量可能地减小冲突。
2.缓存项的过期时间:1. 绝对过期,这个容易理解:就是在缓存放入Cache时,指定一个具体的时间。当时间到达指定的时间的时,缓存项自动从Cache中移除。 2. 滑动过期:某些缓存项,我们可能只希望在有用户在访问时,就尽量保留在缓存中,只有当一段时间内用户不再访问该缓存项时,才移除它, 这样可以优化内存的使用,因为这种策略可以保证缓存的内容都是【很热门】的。 操作系统的内存以及磁盘的缓存不都是这样设计的吗?而这一非常有用的特性,Cache也为我们准备好了,只要在将缓存项放入缓存时, 指定一个滑动过期时间就可以实现了。
以上二个选项分别对应Add, Insert方法中的DateTime absoluteExpiration, TimeSpan slidingExpiration这二个参数。