Session Object
Cookie/Session的区别:Cookie
是透过客户端纪录讯息确定使用者身份Session
是透过在伺服器端纪录讯息确定使用者身份
Session
物件用于在使用者访问网站时维护会话资讯。在一个使用者访问网站时,伺服器会创建一个唯一的 Session
物件,并将其与该使用者相关联。这个 Session
物件会存储有关使用者的信息,比如使用者的身份识别和设置。Session 物件解决的问题:在使用者访问网站时,由于 HTTP
协议的无状态性,伺服器不会知道使用者是谁以及他们在网站上的活动。ASP
通过为每个使用者创建一个唯一的 cookie
来解决这个问题,该 cookie
包含用户的身份信息。Session 物件的特点:Session
物件中的变量仅保存一个单独用户的信息,而不是所有用户的信息。这些存储在 Session
物件中的变量在整个应用程式中的所有页面都是可用的,因此可以在不同页面间共享信息。伺服器会在每个新用户访问时创建一个新的 Session
物件,并在会话过期时销毁该 Session
物件。总结来说,Session 物件是 ASP 中一个重要的功能,用于维护用户会话的状态信息,从而实现用户在网站上的个性化体验和功能。
什么样的情况下会开始Session?
新的使用者对发送请求和Global.asa
file包含Session_OnStart
有值被存入在Session
的变数当中使用者请求 ASP 文件,Global.asa 文件使用<object>
标记实例化具有session
範围的对象下面内容是脑补来的,参考看看...至于对不对还请指教
Global.asa
fileSub 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
变数,分别为username
及age
,用来储存使用者的姓名和年龄
而当值已经被存入之后,我们就可以在任何的页面获取到
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%>