iT邦幫忙

0

ASP.NET Web Pages - w3schools note - Session

  • 分享至 

  • xImage
  •  

Session Object

Cookie/Session的區別:
Cookie 是透過客戶端紀錄訊息確定使用者身份
Session 是透過在伺服器端紀錄訊息確定使用者身份

  1. Session 物件的作用:
  • Session 物件用於在使用者訪問網站時維護會話資訊。
  • 在一個使用者訪問網站時,伺服器會創建一個唯一的 Session 物件,並將其與該使用者相關聯。
  • 這個 Session 物件會存儲有關使用者的信息,比如使用者的身份識別和設置。
  1. Session 物件解決的問題:
  • 在使用者訪問網站時,由於 HTTP 協議的無狀態性,伺服器不會知道使用者是誰以及他們在網站上的活動。
  • ASP 通過為每個使用者創建一個唯一的 cookie 來解決這個問題,該 cookie 包含用戶的身份信息。
  1. Session 物件的特點:
  • Session物件中的變量僅保存一個單獨用戶的信息,而不是所有用戶的信息。
  • 這些存儲在 Session 物件中的變量在整個應用程式中的所有頁面都是可用的,因此可以在不同頁面間共享信息。
  • 伺服器會在每個新用戶訪問時創建一個新的 Session 物件,並在會話過期時銷毀該 Session 物件。

總結來說,Session 物件是 ASP 中一個重要的功能,用於維護用戶會話的狀態信息,從而實現用戶在網站上的個性化體驗和功能。

什麼樣的情況下會開始Session?

  • 新的使用者對發送請求和 Global.asafile包含Session_OnStart
  • 有值被存入在Session的變數當中
  • 使用者請求 ASP 文件,Global.asa 文件使用<object>標記實例化具有session範圍的對象

下面內容是腦補來的,參考看看...至於對不對還請指教

  1. Global.asafile
Sub Session_OnStart
    在Session開始時執行的程式碼
End Sub
  1. 有值被存入在Session的變數
<%
Session("username") = "John"
%>
  1. Global.asa 文件使用<object>標記
<object id="MySessionObject" runat="Server" scope="Session" ProgID="MyApp.MyClass"></object>

什麼樣的情況下會結束Session?

如果使用者在指定時間內未要求或重新整理應用程式中的頁面,則會話結束。
這就好像你今天登入了某個要登入帳號密碼的網站,結果你掛在上面太久,再次切到那個網頁的時候
原本登入的狀態已經變為登出,顯示的畫面是登入的畫面。

ASP中預設的時間是二十分鐘,然而如果要調整這個時間的話則要參考下方的程式碼
Session.Timeout方法

<%
Session.Timeout=5
%>

如果要立即結束的話則是...Session.Abandon方法,但我不知道實務上這個方法的概念是如何應用
我猜會不會就像ChatGPT 4.0需要付費的一樣,雖然我們已經登入開始使用,但是僅限免費的3.5版本
如果你切換到4.0版本,則立即停止你做任何使用,並顯示相關的欄位視窗要你購買升級,我猜而已...

<%
Session.Abandon
%>

存入變數並獲取其值

<%
Session("username")="Donald Duck"
Session("age")=50
%>

此程式碼中創建了兩個Session變數,分別為usernameage,用來儲存使用者的姓名和年齡

而當值已經被存入之後,我們就可以在任何的頁面獲取到

Welcome <%Response.Write(Session("username"))%>

並且也可以依據使用者的偏好,來返回對應頁面

<%If Session("screenres")="low" Then%>
  This is the text version of the page
<%Else%>
  This is the multimedia version of the page
<%End If%>

像這段範例就表示使用者的螢幕解析度如果比較低的話,就給予文字版的網頁(概念上是這樣)

移除Session變數

Contents這個集合包含了所有的Session變數
因此我們可以使用當中Remove的方法

<%
If Session.Contents("age")<18 then
  Session.Contents.Remove("sale")
End If
%>

如果Session變數「age」的值低於 18,下面的範例將刪除Session變數「sale」
感覺是在表示如果這個人還未成年,就不販賣...

此外,也有移除全部Session變數的用法

<%
Session.Contents.RemoveAll()
%>

透過迴圈來看有哪些變數被儲存

<%
Session("username")="Donald Duck"
Session("age")=50

dim i
For Each i in Session.Contents
  Response.Write(i & "<br>")
Next
%>

一樣會用到Contents這個集合

<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
  Response.Write(Session.Contents(i) & "<br>")
Next
%>

另外還可以透過Session.Contents.Count這個方法得到Contents集合中有幾個Session變數
在迴圈進行後,Session.Contents(i)得到的是變數的值
前面的Session.Contents則是得到變數名稱

如果是StaticObjects這個集合的話,則可以透過下方的程式碼來直接列印出當中的值

<%
dim i
For Each i in Session.StaticObjects
  Response.Write(i & "<br>")
Next
%>

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言