C#中Session的用法詳細介紹

来源:https://www.cnblogs.com/sgxw/archive/2020/07/23/13366086.html
-Advertisement-
Play Games

Session中文是“會話”的意思,在ASP.NET中代表了伺服器與客戶端之間的“會話”。Session的作用時間從用戶到達某個特定的Web頁開始,到該用戶離開Web站點,或在程式中利用代碼終止某個Session結束。引用Session 則可以讓一個用戶訪問多個頁面之間的切換也會保留該用戶的信息。 ...


Session模型簡介

      在學習之前我們會疑惑,Session是什麼呢?簡單來說就是伺服器給客戶端的一個編號。當一臺WWW伺服器運行時,可能有若幹個用戶瀏覽正在運正在這台伺服器上的網站。當每 個用戶首次與這台WWW伺服器建立連接時,他就與這個伺服器建立了一個Session,同時伺服器會自動為其分配一個SessionID,用以標識這個用 戶的唯一身份。這個SessionID是由WWW伺服器隨機產生的一個由24個字元組成的字元串,我們會在下麵的實驗中見到它的實際樣子。

  這個唯一的SessionID是有很大的實際意義的。當一個用戶提交了表單時,瀏覽器會將用戶的SessionID自動附加在HTTP頭信息 中,(這是瀏覽器的自動功能,用戶不會察覺到),當伺服器處理完這個表單後,將結果返回給SessionID所對應的用戶。試想,如果沒有 SessionID,當有兩個用戶同時進行註冊時,伺服器怎樣才能知道到底是哪個用戶提交了哪個表單呢。當然,SessionID還有很多其他的作用,我們會在後面提及到。

  除了SessionID,在每個Session中還包含很多其他信息。但是對於編寫ASP或ASP.NET的程式與來說,最有用的還是可以通過 訪問ASP/ASP.NET的內置Session對象,為每個用戶存儲各自的信息。例如我們想瞭解一下訪問我們網站的用戶瀏覽了幾個頁面,我們可能在用戶可能訪問到每個的頁面中加入。到這裡我們對Sassion有了一定的認識,那麼下麵介紹一寫Sassion的屬性及特點。

Session具有以下特點

(1)Session中的數據保存在伺服器端; 
(2)Session中可以保存任意類型的數據; 
(2)Session預設的生命周期是20分鐘,可以手動設置更長或更短的時間。

需要註意的是在Session變數存儲過多的數據會消耗比較多的伺服器資源,在使用session時應該慎重。

Session的具體用法

(1)存入字元串:

Session["userName"] = "aaa";

(2)取值:

string str = Session["userName"].ToString();

獲取session時一般這麼寫:string username=session[“username”],但是在給對象賦值的時候我們需要註意兩點:

    2.1:判斷是否為null

    2.2:類型的轉換

 如是什麼某記錄的編號:
    Session["id"] = 1;
    這樣取值:
    int id1 = Convert.ToInt32(Session["userName"]);

(3)釋放方式:清除某個Session

     Session["UserName"] = null;
     Session.Remove("UserName");

     清除全部Session

     Session.Abandon();

     session.removeAll();

Session數據存放的位置和形式

web.config 配置節點語法:

<system.web>
<sessionState mode="Off|InProc|StateServer|SQLServer"
cookieless="true|false"
timeout="number of minutes"
stateConnectionString="tcpip=server:port"
sqlConnectionString="sql connection string"
stateNetworkTimeout="number of seconds"
/>
</system.web>

mode:設置將Session信息存儲到哪裡

Off:不使用Session功能;

InProc :將Session存儲在IIS進程內,這是預設值,也最常用(優點是簡單,性能最高。但是當重啟IIS伺服器時Session丟失。);

StateServer :將Session存儲在ASP.NET狀態服務進程中(重新啟動Web應用程式時保留會話狀態,並使會話狀態可以用於網路中的多個Web伺服器。);

SQLServer :將Session存儲在SQL Server中(存儲在記憶體和磁碟中,伺服器掛掉重啟後都還在)。

cookieless:設置客戶端的Session信息存儲到哪裡

ture 使用Cookieless模式;這時客戶端的Session信息就不再使用Cookie存儲了,而是將其通過URL存儲。

false 使用Cookie模式,這是預設值

timeout 設置經過多少分鐘後伺服器自動放棄Session信息。預設為20分鐘。

stateConnectionString 設置將Session信息存儲在狀態服務中時使用的伺服器名稱和埠號

例如:"tcpip=127.0.0.1:42424”。當mode的值是StateServer是,這個屬性是必需的。(預設埠42424)。

sqlConnectionString 設置與SQL Server連接時的連接字元串。

例如"data source=localhost;Integrated Security=SSPI;Initial Catalog=joye"。當mode的值是SQLServer時,這個屬性是必需的。

stateNetworkTimeout 設置當使用StateServer模式存儲Session狀態時,經過多少秒空閑後,斷開Web伺服器與存儲狀態信息的伺服器的TCP/IP連接的。預設值是10秒鐘。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 介面概述: 1、介面是Java語言中的一種引用類型,是方法的"集合",所以介面的內部主要就是定義方法,包含常量,抽象方法(JDK 7及以前),額外增加預設方法和靜態方法(JDK 8),額外增加私有方法(jdk9)。 介面的定義,它與定義類方式相似,但是使用 interface 關鍵字。它也會被編譯成 ...
  • 智能指針可以對動態資源進行管理,保證任何情況下,已經構造的對象能夠安全的自動銷毀。 ...
  • 任何Java開發人員的必備技能 現在,讓我們一起探索這個Java開發人員路線圖,並找出應該學習哪些工具,框架,庫和API。 1.工具 路線圖工具部分分為兩個主要部分。首先,IDE是您的主要工具,它幾乎可以完成您所要求的一切,例如編譯,運行,調試,分析,測試,比較文件和代碼,重構等等。 第二部分是構建 ...
  • 內容簡介 · · · · · · 本書是經典教程的全新改版,作者根據Python 3.0版本的種種變化,全面改寫了書中內容,做到既能“瞻前”也能“顧後”。本書層次鮮明、結構嚴謹、內容翔實,特別是在最後幾章,作者將前面講述的內容應用到了10個引人入勝的項目中,並以模板的形式介紹了項目的開發過程。本書既 ...
  • 方法一:新增models的Manager方法 下麵就直接發代碼了 class RandomManager(models.Manager): def get_queryset(self): return super(RandomManager, self).get_queryset().order_b ...
  • BitMap的基本思想就是用一個bit位來標記某個元素對應的Value,而Key即是該元素。由於採用了Bit為單位來存儲數據,因此可以大大節省存儲空間。 BitMap可以看成一種數據結構。 ...
  • 寫在前面 現在部署Asp.Net Core應用已經不再限制於Windows的IIS上,更多的是Docker容器、各種反向代理來部署。也有少部分用IIS部署的,IIS部署確實是又快又簡單,圖形化操作三下五除二就可以發佈好一個系統了。在過去Asp.Net MVC 項目部署的時候,還常常使用IIS一個功能 ...
  • identityserver4 的版本前段時間更新到V4,和之前的版本,還是有一些使用的差異; 1. API資源聲明,之前版本用的是ApiResource,新版本用的是ApiScope,從名字就可以看出區別,新版是用 Scope 區分的; /// <summary> /// 新版本 /// </su ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...