萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> asp.net編程 >> ASP.NET 狀態的傳遞和保存

ASP.NET 狀態的傳遞和保存

  1,HTTP協議是無狀態的。服務器不會記住上次給浏覽器的處理結果,如果需要上次處理結果(上次狀態)就需要浏覽器把處理結果值(上次狀態)再次給服務器。

  2,URL傳值:通過URL參數或者通過Form表單進行頁面件的傳值 (不能做到很自由的存取和讀取,而且不安全)

  3,Cookie :①Cookie可以用來進行更加自由的數據的存取和讀取。

  ②Cookie是和站點相關的,自己域名寫的只有自己的域名才可以讀取。

  ③客戶端向服務器發送請求的時候 處理發送Form表單信息以外還會把和站點有關的所有的Cookie發送給服務器,是強制的。

  ④服務器返回的數據處理HTML數據以外,還會返回修改的Cookie,浏覽器拿到修改後的Cookie更新到本地的Cookie

  ⑤服務器端使用Cookie案例,記住用戶名功能:

  A,設置頁面值: Response.SetCookie(new HttpCookie("UserName",username))

  B,讀取頁面值: username=Request.Cookies["UserName"].Value

  ⑥浏覽器關閉以後Cookie的聲明周期到期,也就是Cookie的默認生命周期是浏覽器的生命周期。可以通過設置Expires屬性設置Cookie的過期時間:Cookie.Expires=DateTime.Now.AddDays(-1)

  ⑦Cookie在客戶端是以鍵值對存在的

  4,Cookie缺點:①客戶端額可以手動清楚Cookie 所以Cookie裡面存放的信息是可有可無的信息

  ②浏覽器對 Cookie 的大小有限制,因此只有不超過 4096 字節才能保證被接受

  ③機密信息不能放到Cookie裡面

  ④Cookie不能跨浏覽器

  5,Cookie的寫和讀: A,新建CookieTest.html頁面並添加 兩個按鈕分別用於Cookie的讀和寫

  <!DOCTYPE html>

  <html xm lns="http://www.w3.org/1999/xhtml">

  <head>

  <me ta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title></title>

  </head>

  <body>

  <form>

  <in put type="submit" name="Read" value="讀取Cookie" /> 

  <in put type="submit" name="Write" value="寫入Cookie" />

  <br />

  讀取出來的Cookie: $Model.CookieValue

  </form>

  </body>

  </html>

  B,建立對應的CookieTest.ashx頁面 實現Cookie的新建寫入本地以及讀取Cookie的值

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Web;

  namespace HttpNoStatus

  {

  /// <summary>

  /// HttpCookie 的摘要說明

  /// </summary>

  public class CookieTest : IHttpHandler

  {

  public void ProcessRequest(HttpContext context)

  {

  context.Response.ContentType = "text/html";

  //if else 判斷是點擊的那個按鈕

  if (!string.IsNullOrEmpty(context.Request["Read"]))

  {

  if (context.Request.Cookies["Age"] != null)

  {

  HttpCookie cookie = context.Request.Cookies["Age"];

  string strValue = cookie.Value;

  var data = new { CookieValue = strValue };

  //加載模板頁面並傳遞 Cookie Value的值

  string strHtml = Common_Nvelocity.RenderHTML("CookieTest.html", data);

  context.Response.Write(strHtml);

  }

  else

  {

  context.Response.Write("cookie 不存在");

  }

  }

  else if (!string.IsNullOrEmpty(context.Request["Write"]))

  {

  //寫入新的Cookie

  HttpCookie acookie = new HttpCookie("Age");

  acookie.Value = "25";

  acookie.Expires = DateTime.MaxValue;

  context.Response.Cookies.Add(acookie);

  //Cookie不存在 直接加載模板頁面

  string strHtml = Common_Nvelocity.RenderHTML("CookieTest.html", null);

  context.Response.Write(strHtml);

  }

  else

  {

  //第一次加載頁面

  string strHtml = Common_Nvelocity.RenderHTML("CookieTest.html", null);

  context.Response.Write(strHtml);

  }

  }

  public bool IsReusable

  {

  get

  {

  return false;

  }

  }

  }

  }

  6,Cookie最主要的一個功能是保存用戶的登陸名,這樣用戶在下次登陸的時候系統就可以自動填寫登陸名稱

  A,新建LoginCookie.html頁面,頁面中添加我們經常見到的 用戶名,用戶密碼,登陸

  登陸頁面第一次加載的時候,設置默認的登陸名為空,登陸成功以及再次登陸的時候系統就自動補充登陸用戶名

  <!DOCTYPE html>

  <html xm lns="http://www.w3.org/1999/xhtml">

  <head>

  <me ta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <title></title>

  </head>

  <body>

  <form action="LoginCookie.ashx" method="post">

  <table>

  <tr>

  <td>登陸名</td>

  <td>

  <in put type="text" name="UserName" value="$Model.LoginUser" /></td>

  </tr>

  <tr>

  <td>密碼</td>

  <td>

  <in put type="password" name="Password" /></td>

  </tr>

  <tr>

  <td>

  <in put type="submit" name="Login" value="登陸" /></td>

  <td></td>

  </tr>

  </table>

  </form>

  </body>

  </html>

  B, 新建對應的LoginCookie.ashx頁面,實現把用戶名讀取出來並寫入Cookie "ckLoginUser"

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Web;

  namespace HttpNoStatus

  {

  /// <summary>

  /// LoginCookie 的摘要說明

  /// </summary>

  public class LoginCookie : IHttpHandler

  {

  public void ProcessRequest(HttpContext context)

  {

  context.Response.ContentType = "text/html";

  //加載頁面直接顯示 頁面

  if (context.Request.Form["Login"] == null)

  {

  string strHtml = "";

  var data = new { LoginUser = "" }; //登陸賬號默認為空

  //判斷Cookie是否存在,如果存在 把Cookie的值傳遞到HTML頁面,如果不存在就是默認的空

  if (context.Request.Cookies["ckLoginUser"] != null)

  {

  data = new { LoginUser = context.Request.Cookies["ckLoginUser"].Value.ToString() };

  }

  strHtml = Common_Nvelocity.RenderHTML("LoginCookie.html", data);

  context.Response.Write(strHtml);

  }

  else

  {

  //用戶登陸,保存用戶名到Cookie

  HttpCookie LoginUser = new HttpCookie("ckLoginUser");

  LoginUser.Value = context.Request.Form["UserName"];

  LoginUser.Expires = DateTime.Now.AddDays(30);

  context.Response.Cookies.Add(LoginUser);

  //加載頁面直接顯示 頁面

  string strHtml = Common_Nvelocity.RenderHTML("LoginCookie.html", new { LoginUser = context.Request.Form["UserName"] });

  context.Response.Write(strHtml);

  }

  }

  public bool IsReusable

  {

  get

  {

  return false;

  }

  }

  }

  }

  7,以上方法把登陸賬號以Cookie的形式存放在客戶端,這樣每一次的請求就可以帶出

copyright © 萬盛學電腦網 all rights reserved