2019年8月2日 星期五

[ASP.NET] 狀態管理機制(二) Cookie、QueryString 以 WebForm 來練習

類別 存放位置 有效範圍 生命週期 簡略說明
Cookie 客戶端 可跨頁面
可跨子網域
依據設定值 1.傳遞小資料,避免佔頻寬
2.記憶體Cookie(瀏覽器關閉則消失)、硬碟Cookie(有到期時間或手動刪除)
3.避免敏感資料
QueryString 客戶端 當關閉或產生新的URL 1.使用上方便
2.避免敏感資料 3.部分瀏覽器對於Querystring有長度限制

● Cookie

//SET Cookie
HttpCookie cookie = new HttpCookie("WEB");
cookie.Path = "/";                  //設定Cookie的Path(只能在相同URL去Get)
cookie["CV1"] = "001";              //此方法會整體複寫 Cookie["Key"] 的 Value.
cookie.Values.Add("CV2", "002");    //此方法會接續在後,如: CV1=001&CV1=0002
cookie.Values.Add("CV2", "002-2");   
cookie.Values.Add("", "");    
cookie.Expires.AddSeconds(30);      //設定cookie到期時間
Response.Cookies.Add(cookie);       //加入至Response物件,才可回應資料

//GET Cookie          
//方法一
string reqStr = Request.Cookies["WEB"]["CV1"];
//方法二
Dictionary keyValuePairs = new Dictionary();
HttpCookie reqCookie = Request.Cookies["WEB"];      
foreach (string value in reqCookie.Values)
{
    keyValuePairs.Add(value, Request.Cookies["WEB"][value]);
}

//Remove Cookie
if (base.Request.Cookies["WEB"] != null)
{
    base.Response.Cookies["WEB"].Expires = DateTime.Now.AddDays(-1);
}
透過Chrome檢查Cookie紀錄,結果如下:



● QueryString

  1. 在URL設置參數前則會有「?」的作為開頭
  2. [Key]=[Value] 的結構觀念去寫至URL上,如 → UserID=admin&Password=admin

protected void QueryStringButton_Click(object sender, EventArgs e)
{
    var id = System.Web.HttpUtility.UrlEncode(this.AccountTextBox.Text);
    var psd = System.Web.HttpUtility.UrlEncode(this.PasswordTextBox.Text);
    Response.Redirect($"~/LoginInfo.aspx?UserID={id}&Password={psd}");
}

// 取得
// 指定特定key
string strReq = Request.QueryString["參數名稱"];
Response.Write(strReq);

沒有留言:

張貼留言