9、使用Session状态
使用Session状态
不可能真的用Cookie来保存购物车。cookie太小也太简单。
要突破Cookie的限制,Asp.net Framework支持一个名为Session状态的功能。
Session没有大小限制
Session可以保存复杂的对象。
SessionSet.aspx
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { Session["message"] = "Hello World!"; }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <h1> Session Item Added!</h1> </div> </form></body></html><%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { lblMessage.Text = Session["message"].ToString(); }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <asp:Label ID="lblMessage" runat="server"></asp:Label> </div> </form></body></html><%@ Page Language="C#" %><%@ Import Namespace="System.Data" %><%@ Import Namespace="System.Data.SqlClient" %><%@ Import Namespace="System.Web.Configuration" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> DataView dvMovies; protected void Page_Load(object sender, EventArgs e) { dvMovies = (DataView)Session["Movies"]; if (dvMovies == null) { string conString = WebConfigurationManager.ConnectionStrings["Movies"].ConnectionString; SqlDataAdapter dad = new SqlDataAdapter("Select ID,Title,Director from Movies", conString); DataTable dtblMovies = new DataTable(); dad.Fill(dtblMovies); dvMovies = new DataView(dtblMovies); Session["Movies"] = dvMovies; } } protected void grdMovies_Sorting(object sender, GridViewSortEventArgs e) { dvMovies.Sort = e.SortExpression; } protected void Page_PreRender(object sender, EventArgs e) { grdMovies.DataSource = dvMovies; grdMovies.DataBind(); }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <asp:GridView ID="grdMovies" AllowSorting="true" EnableViewState="false" runat="server" OnSorting="grdMovies_Sorting"> </asp:GridView> <br /> <asp:LinkButton ID="lnkReload" Text="Reload Page" runat="server" /> </div> </form></body></html>id title directorint(自增) nvchar(50) nVarchar(50)
<configuration><connectionStrings><add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/> <add name="Movies" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\s2_3.mdf;User Instance=true" providerName="System.Data.SqlClient"/> </connectionStrings>
<%@ Application Language="C#" %><script RunAt="server"> void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 Application["SessionCount"] = 0; } void Application_End(object sender, EventArgs e) { // 在应用程序关闭时运行的代码 } void Application_Error(object sender, EventArgs e) { // 在出现未处理的错误时运行的代码 } void Session_Start(object sender, EventArgs e) { // 在新会话启动时运行的代码 Application.Lock(); int count = (int)Application["SessionCount"]; Application["SessionCount"] = count + 1; Application.UnLock(); } void Session_End(object sender, EventArgs e) { // 在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时,才会引发 Session_End 事件。 // 如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。 Application.Lock(); int count = (int)Application["SessionCount"]; Application["SessionCount"] = count - 1; Application.UnLock(); } </script><%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { lblSessionCount.Text = Application["SessionCount"].ToString(); }</script><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <asp:Label ID="lblSessionCount" runat="server"></asp:Label> </div> </form></body></html><configuration> <system.web> <sessionState timeout="60"/> </system.web></configuration>