在学习ASP.NET视频的饿时候又接触到了Session。在学习牛腩的时候,牛腩老师给讲过session的用法,但是理解的不深刻,只是知道他应用于页面之间的传值!那么在这里我就提两个问题,咱们来一 一讨论一下!
第一:Session是如何用来传值的呢?
在我回头翻看牛腩的登录界面的后台代码的时候发现了如下的代码:
1、在登录成功的时候,把用户名存入Session,后面调用登录名的时候就直接把session中的值赋给一个变量来用就可以了!
if (b)
{//登录成功
Session["admin"] = name;
//指向新的URL
Response.Redirect("~/admin/categorymanager.aspx");
}
2、在生成验证码的时候,吧验证码存入了Session:
string checkCode = GenCode(5); // 产生5位随机字符
context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
3、在登录页面验证验证码是否输入正确的时候,又把验证码赋给了一个变量来进行判断:
//判断验证码是否输入正确
string code = txtCode.Text.Trim().ToUpper();
string rightCode = Session["Code"].ToString();//把Session中存储的验证码赋给一个变量
if (code != rightCode)
{
Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('验证码输入错误!'):</script>");
return;
}
由这三断代码我们就可以明白,这个Session的具体用法:
我们把控件中的值存储在Session变量中,然后使用Response.Redirect方法重定向到另一个页面,在另一个页面中使用存储在Session中的变量,以实现不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗.
第二:那么只有Session可以实现不同页面之间的传值吗?
答案当然是否定的,我经过一系列的查询,发现还可以使用QueryString和使用Server.Transfer。这两个方法至今为止从来没有用过,所以只是简单的了解一下,当真正用到的时候再仔细的研究它们的用法。
使用QueryString:可以和get请求的后台代码对比学习,非常相似!
源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="webform1.aspx?name="Erica "&password=" lishaoran";
Response.Redirect(url);//跳到新URL所示界面
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
lblName.Text=Request.QueryString["name"];
lblPWD.Text=Request.QueryString["password"];
}
可见这个方法非常简单易懂,但是也是涉及到安全问题的话,最好不要用!
使用Server.Transfer:(这个个人认为比较难理解,不过道理都是一样的)例子如下:
原页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("WebForm2.aspx"); //利用Server.Transfer跳到指定的WebForm2的页面上
}
目标页面代码:
private void Page_Load(object sender, System.EventArgs e)
{
//创建一个窗体变量
WebForm1 wf1;
//用Context.Handler创建一个窗体对象
wf1=(WebForm1)Context.Handler;
lblName.Text=wf1.Name;
lblPWD.Text=wf1.EMail;
}
小结:
在开始学习牛腩的时候有好多的东西不是非常的了解,不过没关系,等后边用到以后结合现在所学的知识再结合老师的讲课和自己锁的笔记,一定会有更好的理解的。