ASP.NET Web Pages - w3schools note - Session

Session Object

Cookie/Session的区别:
Cookie 是透过客户端纪录讯息确定使用者身份
Session 是透过在伺服器端纪录讯息确定使用者身份

Session 物件的作用:Session 物件用于在使用者访问网站时维护会话资讯。在一个使用者访问网站时,伺服器会创建一个唯一的 Session 物件,并将其与该使用者相关联。这个 Session 物件会存储有关使用者的信息,比如使用者的身份识别和设置。Session 物件解决的问题:在使用者访问网站时,由于 HTTP 协议的无状态性,伺服器不会知道使用者是谁以及他们在网站上的活动。ASP 通过为每个使用者创建一个唯一的 cookie 来解决这个问题,该 cookie 包含用户的身份信息。Session 物件的特点:Session物件中的变量仅保存一个单独用户的信息,而不是所有用户的信息。这些存储在 Session 物件中的变量在整个应用程式中的所有页面都是可用的,因此可以在不同页面间共享信息。伺服器会在每个新用户访问时创建一个新的 Session 物件,并在会话过期时销毁该 Session 物件。

总结来说,Session 物件是 ASP 中一个重要的功能,用于维护用户会话的状态信息,从而实现用户在网站上的个性化体验和功能。

什么样的情况下会开始Session?

新的使用者对发送请求和 Global.asafile包含Session_OnStart有值被存入在Session的变数当中使用者请求 ASP 文件,Global.asa 文件使用<object>标记实例化具有session範围的对象

下面内容是脑补来的,参考看看...至于对不对还请指教

Global.asafile
Sub Session_OnStart    在Session开始时执行的程式码End Sub
有值被存入在Session的变数
<%Session("username") = "John"%>
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")=50dim iFor Each i in Session.Contents  Response.Write(i & "<br>")Next%>

一样会用到Contents这个集合

<%dim idim jj=Session.Contents.CountResponse.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 iFor Each i in Session.StaticObjects  Response.Write(i & "<br>")Next%>

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章