一、复习Cookie、Session、Application、ViewState等
Cookie是存在浏览器端硬盘或内存中的。浏览器记住用户名密码不是Cookie。
Cookie有Domain的限制:主域的Cookie所有子域和主域都能访问,子域的Cookie只有子域才能访问。如果要让主域访问子域的cookie,得在子域的cookie上设置domain为主域。
Session存在服务器端内存里,让每个浏览器记住一个aspnet_sessionId。如果在webconfig中禁用cookie存sessionId,sessionId将存在Url地址中(http://loaclhost/(sss)/a.aspx)。还可以通过配置将session放在进程外,如:另一个机器或数据库中。
如果客户端禁用cookie,而服务器端webconfig中没有禁用,则浏览器每次请求都是新的会话。
Session应用场景:验证码、登录。
Application:存储在服务器端的内存中,尽量不要往里面放东西,公共性的东西放在这里。
ViewState实现原理:隐藏域。
页面间传值的方式:
隐藏域、viewstate、表单控件、QueryString、session、Application、cookie…
二、模拟session
/// <summary> ///MySession 的摘要说明 ///TODO:如何实现session延时删除?在SessionManager类里面添加一个属性SetTimeOut即超时时间,在Global.asax.cs文件的Application_Start事件里面去配置这个SetTimeOut值,并在每次请求的时候记录下最后一次请求的时间,在SessionManager里面使使用Timer进行控制。就可以达到Session的功能! /// </summary> public class MySession { //外字典的键是sessionID,值(内字典)是session private static IDictionary<string, IDictionary<string, object>> data = new Dictionary<string, IDictionary<string, object>>(); public static IDictionary<string, object> GetSession(string sessionID) { if (data.ContainsKey(sessionID)) { return data[sessionID]; } else { IDictionary<string, object> session = new Dictionary<string, object>(); data[sessionID] = session; return session; } } }
三、jsValidate异步验证表单、AjaxForm异步提交表单
<script src="Scripts/jquery.validate.js" type="text/javascript"></script> <script src="Scripts/MyAjaxForm.js" type="text/javascript"></script> <script type="text/javascript"> $(function () { validateFrm(); //表单校验 submitFrm(); //提交表单 }); //校验整个表单 function validateFrm() { $("#frmSubmit").validate({ rules: { txtUName: { remote: "CheckUNameIsExist.ashx", //要用到数据库资源,所以remote到Handler required: true, minlength: 4 }, txtPwd: { required: true, rangelength: [5, 15] }, txtPwd2: { equalTo: "#txtPwd" } }, messages: { txtUName: { required: "必填", minlength: "至少4个字符", remote: "用户名已存在" }, txtPwd: { required: "必填", rangelength: "长度为5-15个字符" }, txtPwd2: "两次密码不一致" } }); } //提交表单 function submitFrm() { $("#btnSub").click(function () { $("#frmSubmit").ajaxSubmit({ success: function (str) { if (str == 'ok') { window.location = "Login.htm"; } else { alert("注册失败!"); } }, error: function (error) { alert(error); }, url: "Regist.ashx", type: "post" }); }); } </script>
小知识:
1、分页存储过程有输出参数,reader读完再取out参数,一般有输出参数时通过dateTable读取。
2、改时间格式:
eval(jsonRow.SubTime.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"))
eval(value.replace(/\/Date\((\d+)\+\d{4}\)\//gi, "new Date($1)"))).pattern("yyyy-M-d h:m:s")
3、 //序列化一个类
string str = javaScriptSerializer.Serialize(objData);
//反序列化
var demo = javaScriptSerializer.Deserialize<NikClass>(str);