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

ASP.NET 頁面間傳值常用方法總結與選型指南

     編輯:ASP.NET 基礎

七大傳值方式對照表

方式 適用場景 優點 缺點/注意
QueryString (GET) 少量非敏感資料、書籤分享、SEO 簡單、可書籤、可刷新 長度限制、明文、不可攜帶大型物件
Form POST 表單提交、大量資料、檔案上傳 無長度限制、相對安全 ASP.NET WebForms 預設 PostBack 到自身,跨頁需設定 PostBackUrl
Session 用戶狀態、購物車、多步驟精靈 伺服器端儲存、型別豐富、生命週期可控 消耗記憶體、預設 InProc 重啟遺失、叢集需 StateServer/SQLServer
Application 全域計數器、快取共用資料 全應用程式共享 所有用戶可見、併發需鎖定、重啟歸零
Cookie 記住登入、偏好設定、追蹤 持久化、跨 Session 存活 大小 4KB、用戶可禁用/刪除、敏感資料需加密
Response.Redirect 導向新頁、帶 QueryString 瀏覽器位址列更新、可跨網域 兩次請求、失去原頁面 Context
Server.Transfer 同應用程式內轉交、保留表單/QueryString 單次請求、保留 Context、效能較好 瀏覽器位址不變、僅限同應用程式、相對路徑易混淆

程式碼快速參考

1. QueryString / Redirect

// 送出
Response.Redirect($"Target.aspx?id=123&name={Server.UrlEncode("中文")}");
// 接收
string id = Request.QueryString["id"];
string name = Request.QueryString["name"];

2. Session

// 寫入
Session["User"] = new UserInfo { Id = 1, Name = "Tom" };
// 讀取
var user = Session["User"] as UserInfo;

3. Cookie

// 寫入(加密建議)
var cookie = new HttpCookie("Pref", "theme=dark") { Expires = DateTime.Now.AddDays(30), HttpOnly = true };
Response.Cookies.Add(cookie);
// 讀取
string theme = Request.Cookies["Pref"]?.Value;

4. Server.Transfer 保留表單資料

// Source.aspx
Server.Transfer("Target.aspx", true); // true = preserveForm
// Target.aspx
string txt = Request.Form["txtInput"]; // 可直接取得來源頁表單值

5. Cross-Page PostBack (WebForms 特有)

<!-- Source.aspx -->
<asp:Button PostBackUrl="Target.aspx" Text="送出" />
// Target.aspx
if (PreviousPage != null)
{
    var txt = PreviousPage.FindControl("txtInput") as TextBox;
    string val = txt?.Text;
}

選型決策樹

  1. 資料是否敏感? → 是 → Session / 加密 Cookie / POST
  2. 資料量大或含檔案? → POST / Session / 暫存檔
  3. 需要書籤/分享/SEO? → QueryString
  4. 跨網域? → Redirect + QueryString / Token
  5. 同應用程式內單純轉交? → Server.Transfer
  6. 需持久化跨瀏覽器關閉? → Cookie / 資料庫

安全性提醒

  • QueryString/Form/Session 皆不可直接信任,後端必須驗證授權與資料完整性。
  • 敏感資料(身分證、密碼、金流)嚴禁放入 QueryString/Cookie/ViewState。
  • Cookie 設定 HttpOnly=true; Secure=true; SameSite=Lax/Strict。
  • Session 固定攻擊防範:登入成功後呼叫 Session.RegenerateID()(需自行實作或用 OWIN)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved