一、复习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
三、jsValidate异步验证表单、AjaxForm异步提交表单
小知识:
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);
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);