補充教學-資料儲存Session

閱讀時間約 10 分鐘

在 C# 的 Web 開發中,Session、Cookie 和資料庫是三種常用的儲存和管理資料的方式。以下是它們的功能、優缺點比較:


Session

  • 功能:

Session 是一種在伺服器端保存使用者資料的方式,會話期間資料會存儲在伺服器中,並且在瀏覽器關閉或 Session 超時後自動清除。每個使用者會有一個唯一的 Session ID,用於區分不同的用戶。

  • 優點:
  1. 安全性較高,因為資料儲存在伺服器端,減少了敏感資訊暴露的風險。
  2. 能夠存儲較大的資料量,適合短期內需要頻繁使用的資料。
  3. Session 自動過期,減少了伺服器負載。
  • 缺點:
  1. 過多使用可能會增加伺服器負擔,尤其是大量使用者同時在線時。
  2. 須管理 Session 過期時間,並處理過期 Session 的清理問題。
  3. 無法在不同的伺服器間共享,除非使用分散式 Session 方案或外部 Session 管理服務。

Cookie

  • 功能

Cookie 是一種在用戶端(瀏覽器)儲存資料的方式。資料會存儲在使用者的瀏覽器中,並且可以在之後的請求中發送回伺服器。適合儲存非敏感的簡單資料,例如偏好設定或身份標識。

  • 優點
  1. 可以在不同頁面甚至不同訪問間共享資料。
  2. 支援長期保存,例如「記住我」功能,可以保存幾天甚至幾個月。
  3. 使用者可以自由刪除 Cookie,有助於隱私控制。
  • 缺點
  1. 容量限制,一般最多 4KB,不能存儲大量資料。
  2. 安全性低於 Session,敏感資料可能暴露,需配合加密技術保護。
  3. 容易受到跨站點腳本攻擊(XSS)等安全威脅。

資料庫

  • 功能

資料庫是一種長期儲存資料的方式。應用程式通常會將需要永久保存的資料存儲到資料庫中,例如用戶帳戶資訊、交易紀錄等。可以與伺服器端代碼進行互動,進行 CRUD(創建、讀取、更新、刪除)操作。

  • 優點
  1. 可用於儲存大量且持久的資料,適合儲存需要永久保存的資料。
  2. 資料庫提供查詢功能,能快速檢索大量數據。
  3. 支援多種數據一致性和備份方案,有較好的可靠性。
  • 缺點
  1. 存取資料庫的速度比 Session 和 Cookie 慢,並且可能需要額外的 I/O 開銷。
  2. 資料庫架構和管理較為複雜,需配置備份和恢復機制。
  3. 資料庫的安全和效能會受到高並發訪問的影響。
raw-image


在這裡我們預計使用Session來當作儲存的方式,以下使用一個計數器程式來當作範例

SessionSample.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="SessionSample.aspx.cs" Inherits="SessionSample" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
計數器1
<asp:Label ID="Label1" runat="server" Text="0"></asp:Label>
<br />
<asp:Button ID="Button1" runat="server" Text="計數1" OnClick="Button1_Click" />
<br /><br />
計數器2
<asp:Label ID="Label2" runat="server" Text="0"></asp:Label>
<br />
<asp:Button ID="Button2" runat="server" Text="計數2" OnClick="Button2_Click" />
</div>
</form>
</body>
</html>

SessionSample.aspx.cs

public partial class SessionSample : System.Web.UI.Page
{
int counter1 = 0; //計數器1
int counter2 = 0; //計數器2

protected void Page_Load(object sender, EventArgs e)
{
//計數器1作法
//(無,在這裡無動作)

//計數器2作法
//網頁第一次載入(HTTP GET),按下counter2按鈕是HTTP POST
// IsPostBack:是否是HTTP POST
if (IsPostBack == false)
{
// 如果不存在,初始化計數器為 0
Session["Counter"] = 0;
}
}

//計數器1作法
protected void Button1_Click(object sender, EventArgs e)
{
counter1 += 1;
Label1.Text = counter1.ToString();

//按下計數器1多少次,次數都不會改變
//因為每次按下按鈕後Button1_Click(),counter+=1,Label1顯示1,然後網頁載入網頁
//載入網頁會先從Page_Load()開始,此時counter1為1,所以Label1顯示1
}

//計數器2作法
protected void Button2_Click(object sender, EventArgs e)
{
counter2 = (int)Session["Counter"]; //從session取得現在的counter次數
counter2 += 1;

Label2.Text = counter2.ToString();

Session["Counter"] = counter2; //將counter2儲存到session
}
}

執行結果:

raw-image

以上範例,計數器1不管按下幾次,都只會是1,但是計數器2,每次按下後,透過Session會繼續累加下去。

後續21點遊戲會使用Session來儲存牌堆(Deck)與莊家(Player)、玩家(Player)的手牌資訊。

補充一下Session逾時(Timeout)設定,C# ASP.Net Session預設逾時時間是20分鐘,超過後Session就會自動消失。

以下有兩種方式來變更Session.Timeout設定

1.使用Global.asax

(Visual Stdio專案加入新項目,選擇全域應用程式類別,檔名為Global.asax)

#Global.asax介紹

#Global.asax用法分析

//Golbal.asax裡面原本就存在Session_Start(),在裡面加入設定
void Session_Start(object sender, EventArgs e) {
// 設定 Session 存在時間為 30 分鐘
Session.Timeout = 30;
}

2.修改web.config內容

(每個Visual Studio專案內,預設都有一個web.config檔案)

#微軟web.config介紹

<!--在web.config裡面找到以下內容-->
<configuration>
<system.web>
<!--加入以下這一行-->
<sessionState timeout="30" />
</system.web>
</configuration>

以上兩種變更方式,都會將Session的逾時時間變更為30分鐘

    avatar-img
    0會員
    19內容數
    FIRE
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
    Thumbnail
    在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
    Thumbnail
    你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
    Thumbnail
    ※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
    Thumbnail
    前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
    ※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
    Thumbnail
    在網頁開發中,時間與日期的處理是重要且基礎的部分,本文將介紹 JavaScript 中的日期的處理方法,並提供範例程式來協助你理解。
    Thumbnail
    ※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
    本課程學習如何添加 Room 資料庫相關依賴庫配置。
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
    Thumbnail
    Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
    Thumbnail
    這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
    Thumbnail
    在網路速度有限的情況下,依序記錄不斷產生的資訊,能統計使用者在頁面上操作了哪些功能。
    Thumbnail
    你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
    Thumbnail
    ※ 靜態資源回傳 ※ 什麼是靜態資源: 定義:是指事先準備好的資源,這些資源在伺服器上是靜態的、不會隨著每個請求而改變。 資源通常包括: 靜態 HTML 文件。 CSS。 圖像(Image)。 Video。 字體文件:google fonts。 favicon:網頁名稱旁邊的ico
    Thumbnail
    前面已經安裝好IIS後,並且也新建站台了,那麼接下來這篇就會分享如何使用它
    ※ 生產者和消費者模式 定義: 生產者和消費者在同一時間內共同存取某一個資料空間。生產者負責生成數據並將其放入共享空間,消費者負責從共享空間中取走數據進行處理。兩者之間互不相干,也不須互相知道對方的存在。 共同存取資料空間:生產者和消費者共享同一個資料空間。這個空間通常是緩衝區或隊列,用於在它
    Thumbnail
    在網頁開發中,時間與日期的處理是重要且基礎的部分,本文將介紹 JavaScript 中的日期的處理方法,並提供範例程式來協助你理解。
    Thumbnail
    ※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
    本課程學習如何添加 Room 資料庫相關依賴庫配置。