標籤:
C# 中對 Session 的“(string)”、“.ToString()”與“Convert.ToString”用法筆記
在實際操作當中,我們經常會遇到將 Session 的值轉為 String 去判斷是否為空白或者判斷是否有許可權訪問某頁,這裡的轉換過程如果用得不恰當會拋出異常,給訪問者帶來不好的使用者體驗。這裡我把它寫成筆記,以供參考。
一、當 Session["a"] == null 時,
Session["a"].ToString() 拋出異常;
(string)Session["a"] 為 null;
Convert.ToString(Session["a"]) 為 ""。
二、當 Session["a"] == "" 時,
它們的值都為 ""。
所以,在判斷 Session["a"] 是否有值時,如果用“.ToString()”,那麼必需按照下面的格式與順序寫:
if (Session["a"] != null && Session["a"].ToString() != "")
在這裡,要注意判斷的順序:先判斷是否為 null,再判斷是否為 empty。如果 Session["a"] 為 null,則 Session["a"] != null 為 false 自然不會執行 .ToString(),也就不會報錯;如果 Session["a"] 不為 null,則執行 .ToString() 也不會報錯。
同理 if (Session["a"] == null || Session["a"].ToString() == "") 此句也合法可用。
用 .ToString() 的方法寫格式比較固定,如果換成用 (string) 寫,會比較自由:
if ((string)Session["a"] != null && (string)Session["a"] != "")
if (Session["a"] != null && (string)Session["a"] != "")
這兩種寫法都是可行的,而且對 null 和 empty 的判斷順序沒有關係。
最簡單的方法就是用 Convert.ToString
if (Convert.ToString(Session["aaa"]) == "")
不管 Session["a"] 為 null 還是 empty,Convert.ToString(Session["aaa"]) 都是 empty。
session有效時間預設為20分鐘,內容來自中國站長資訊網(www.chinahtml.com)這個時間是指,當使用者登入後,如果沒有任何動作,即不在web上有請求.將維持這個使用者的身份有效時間是20分鐘,如果這個使用者一直與web有請求操作,那麼,這個時間一直沒有算在20分鐘內,即,如果使用者登入後,即便操作一個小時,那麼也不會出現逾時,除非使用者與伺服器之間掉線
Web.config檔案中的Session配置資訊
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
使用Session對象在頁面之間傳值
使用Session對象可以在頁面之間傳值,但是需要注意的是不能在Session對象中儲存過多的資料,否則伺服器會不堪重負,另外當不再需要seesion對象時,應及時釋放該對象。
例如,使用Session對象來傳送使用者的登入名稱,在另一頁中,將使用者的登入名稱顯示出來。
使用Session對象儲存使用者登入名稱的代碼如下:
Session.Remove("UserName"); Session["UserName"] = txtName.Text; Response.Redirect("NavigatePage.aspx"); |
在NavigatePage.aspx頁面中,將Session對象的值顯示在介面上,其代碼如下:
if (Session["UserName"] == null) { Response.Redirect("Default.aspx"); } else { Label1.Text =Session["UserName"].ToString(); } |
使用Session驗證使用者登入
在ASP.NET中,利用Session對象驗證使用者是否登入的方法很簡單,例如在本執行個體中,當使用者安全登入時,可以利用如下代碼儲存使用者的登入名稱,並跳轉到NavigatePage.aspx中。
if (txtName.Text == "mr" && txtPassword.Text == "mrsoft") { Session["UserName"] = txtName.Text.Trim(); Response.Redirect("NavigatePage.aspx"); } |
在NavigatePage.aspx頁面中,當頁面載入時,首先判斷Session對象中是否有值,如果有值,則進行其他動作;否則,則返回到登入頁中。其主要代碼如下:
if (Session["UserName"] == null) Response.Redirect("Default.aspx"); else { //其他動作 } |
注意:Session對象預設失效期為20分鐘,使用者也可以在Web.Config中對其進行設定,其代碼如下:
【轉載】C# 中Session的用法