ASP.NET——Session会话对象实现多页面数据交互
1.ViewState只能保存当面页面的数据,而Session可实现不同页面间数据的共享
2.使用时依旧跟ViewState一样采用键-值对方式
3.Session 保存的是临时数据,一旦网页关闭,Session亦会被清空




案例代码
代码结构:设置Default4.aspx为启动页面

Default4.aspx的前端代码:
namespace ASP.NET_Demo2.Demo04
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<string> cart = new List<string>();
Session["Cart"] = cart;
}
if (Session["CurrentUser"] != null)
{
this.ltaMsg.Text = "欢迎您:" + Session["CurrentUser"].ToString();
}
else
{
this.ltaMsg.Text = "您还没有登录!";
}
}
//添加到购物车
protected void btnAddToCart_Click(object sender, EventArgs e)
{
//首先判断用户是否登录
if (Session["CurrentUser"] == null)
{
Response.Redirect("UserLogin.aspx");
}
else
{
foreach (Control item in form1.Controls)
{
if (item is CheckBox)
{
CheckBox ckb = (CheckBox)item;
if (ckb.Checked)
{
((List<string>)Session["Cart"]).Add(ckb.Text);
}
}
}
this.btnAddToCart.Text = "添加成功!";
}
}
//显示购物车
protected void btnShowCart_Click(object sender, EventArgs e)
{
Response.Redirect("ShoppingCart.aspx");
}
protected void btnExit_Click(object sender, EventArgs e)
{
Session.Abandon();//清除Session
this.ltaMsg.Text = "您还没有登录!";
}
}
}
Default4.aspx的后台代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List<string> cart = new List<string>();
Session["Cart"] = cart;
}
if (Session["CurrentUser"] != null)
{
this.ltaMsg.Text = "欢迎您:" + Session["CurrentUser"].ToString();
}
else
{
this.ltaMsg.Text = "您还没有登录!";
}
}
//添加到购物车
protected void btnAddToCart_Click(object sender, EventArgs e)
{
//首先判断用户是否登录
if (Session["CurrentUser"] == null)
{
Response.Redirect("UserLogin.aspx");
}
else
{
foreach (Control item in form1.Controls)
{
if (item is CheckBox)
{
CheckBox ckb = (CheckBox)item;
if (ckb.Checked)
{
((List<string>)Session["Cart"]).Add(ckb.Text);
}
}
}
this.btnAddToCart.Text = "添加成功!";
}
}
//显示购物车
protected void btnShowCart_Click(object sender, EventArgs e)
{
Response.Redirect("ShoppingCart.aspx");
}
protected void btnExit_Click(object sender, EventArgs e)
{
Session.Abandon();//清除Session
this.ltaMsg.Text = "您还没有登录!";
}
ShoppingCart的后台代码,前台代码为空
protected void Page_Load(object sender, EventArgs e)
{
//取出对象集合,遍历后显示
List<string> cart = (List<string>)Session["Cart"];
string info = string.Empty;
foreach (string item in cart)
{
info += item + " ";
}
Response.Write("您选的商品为:" + info + "<br><br>");
Response.Write("您的SessionID=" + Session.SessionID);
}
UserLogin的前端代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserLogin.aspx.cs" Inherits="ASP.NET_Demo2.Demo04.UserLogin" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<th colspan="2">
用户登录
</th>
</tr>
<tr>
<td>
用户名:
</td>
<td>
<asp:TextBox ID="txtUserName" runat="server" Width="150px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
密 码:
</td>
<td>
<asp:TextBox ID="txtPwd" runat="server" TextMode="Password" Width="150px"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<asp:Literal ID="lInfo" runat="server"></asp:Literal>
<asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
UserLogin的后台代码:
protected void btnLogin_Click(object sender, EventArgs e)
{
//验证信息
//查询用户信息,验证用户名和密码是否正确
if (this.txtUserName.Text.Trim() == "xiaowang" && this.txtPwd.Text.Trim() == "12345")
{
//保存用户登录信息
Session["CurrentUser"] = this.txtUserName.Text.Trim();
//登录成功后跳转到首页
Response.Redirect("Default.aspx");
}
else
{
this.lInfo.Text = "用户名或密码错误!";
}
}