首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 頁面間傳值完整指南:POST、GET、Session 等六大方式

     編輯:ASP.NET 基礎

一、GET - QueryString (最常用、可書籤)

// 來源頁
Response.Redirect($"Target.aspx?name={HttpUtility.UrlEncode(txtName.Text)}&email={txtEmail.Text}");

// 目標頁
string name = Request.QueryString["name"];
string email = Request.QueryString["email"];
  • 優點:簡單、支援瀏覽器歷史/書籤/分享、無伺服器資源。
  • 缺點:長度限制 (~2KB)、明文敏感資料、可被竄改。

二、POST - 表單跨頁面提交

<!-- 來源頁 -->
<form id="form1" runat="server" action="Target.aspx" method="post">
    <asp:TextBox ID="txtUser" runat="server" />
    <asp:Button ID="btnGo" runat="server" Text="送出" />
</form>
// 目標頁
string user = Request.Form["txtUser"]; // 或 Request["txtUser"]
  • 注意:目標頁面**無法直接存取來源頁面控制項**,僅能讀取 `Request.Form`。
  • 若需驗證 ViewState,來源與目標需共用 MachineKey 或關閉 `EnableViewStateMac` (不建議)。

三、Session (安全、大量資料、多步驟)

// 來源頁
Session["UserData"] = new UserModel { Name = "Tom", Age = 25 };
Response.Redirect("Step2.aspx");

// 目標頁
var data = Session["UserData"] as UserModel;
  • 生命週期:Session Timeout (預設 20 分鐘) 或手動 `Session.Remove`。
  • 叢集環境需設定 **StateServer / SQLServer / Redis** 模式。

四、Server.Transfer + Context.Items (同一請求、URL 不變)

// 來源頁
Context.Items["Token"] = Guid.NewGuid();
Server.Transfer("Target.aspx"); // 伺服器端轉向,瀏覽器 URL 仍為 Source.aspx
// 目標頁
var token = Context.Items["Token"];
  • 優點:效能佳 (無重導)、可共享同一請求的物件實例。
  • 缺點:URL 不變易造成使用者困惑、書籤失效、相對路徑錯誤。

五、Cookie (跨瀏覽器分頁、持久化)

// 寫入
var cookie = new HttpCookie("Pref", "DarkMode") { Expires = DateTime.Now.AddDays(30) };
Response.Cookies.Add(cookie);

// 讀取
string pref = Request.Cookies["Pref"]?.Value;
  • 大小限制 4KB/個、每域名約 20-50 個、可被用戶停用/清除。

六、Application / Cache (全域共享、非使用者專屬)

Application["OnlineCount"] = 100; // 全域
Cache.Insert("Key", data, null, DateTime.Now.AddMinutes(10), Cache.NoSlidingExpiration);
  • 不適合傳遞個人化資料,適用於設定、計數器、共享快取。

方式選型決策樹

  1. 需**書籤/分享/SEO** → **GET (QueryString)**
  2. **表單送出/修改/刪除/敏感資料** → **POST** (搭配 `PostBackUrl` 或 MVC Form)
  3. **多步驟精靈/大量物件/安全性優先** → **Session**
  4. **同一請求內轉向/效能極致** → **Server.Transfer + Context.Items**
  5. **跨分頁/長期偏好設定** → **Cookie**
  6. **全域設定/共享快取** → **Application / Cache**

安全性補充

  • **QueryString/Form/Cookie** 皆可被竄改 → **後端必須驗證權限與資料合法性**。
  • 敏感資料 (ID、Token) 傳遞前 **加密 (AES) 或簽章 (HMAC)**。
  • 防止 CSRF:表單加入 `__RequestVerificationToken` (MVC `@Html.AntiForgeryToken()` / Web Forms `Page.ViewStateUserKey`)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved