เป้าหมาย Session ของ ASP

Session 对象用于存储用户的信息。存储于 session 对象中的变量持有单一用户的信息,并且对于一个应用程序中的所有页面都是可用的。

Session 对象

当您操作某个应用程序时,您打开它,做些改变,然后将它关闭。这很像一次对话(Session)。计算机知道您是谁。它清楚您在何时打开和关闭应用程序。但是在因特网上有一个问题:由于 HTTP 地址无法存留状态,web 服务器并不知道您是谁以及您做了什么。

ASP 通过为每位用户创建一个唯一的 cookie 的方式解决了这个问题。cookie 被传送至客户端,它含有可识别用户的信息。这种接口被称作 Session 对象。

Session สำหรับเก็บข้อมูลเกี่ยวกับผู้ใช้ หรือเพื่อตั้งค่าการเปลี่ยนแปลงของ session สำหรับผู้ใช้ ตัวแปรที่เก็บใน Session มีข้อมูลของผู้ใช้เดี่ยวๆ และสามารถใช้งานได้ทั่วไปในทุกหน้าของโปรแกรม ข้อมูลที่เก็บใน Session ทั่วไปคือ name, id และตัวแปรต่างๆ โปรแกรมจะสร้าง Session ใหม่สำหรับผู้ใช้ใหม่และยกเลิก Session ตัวนี้เมื่อ Session หมดอายุ:

เมื่อใดที่ Session จะเริ่มต้น?

Session จะเริ่มต้น:

  • เมื่อผู้ใช้ใหม่ขอไฟล์ ASP และไฟล์ Global.asa มีการอ้างอิงฟังก์ชัน Session_OnStart;
  • เมื่อมีค่าถูกเก็บในตัวแปร Session;
  • เมื่อผู้ใช้ขอไฟล์ ASP และ Global.asa ใช้แทรก <object> ที่สร้างสำหรับ session ที่สร้างโดย session scope;

เมื่อใดที่ Session จะหยุดทำงาน?

Session ในทันทีที่เกิดเหตุใดๆ ดังนี้:

ถ้าผู้ใช้ไม่ได้ขอหรือรีเฟรชหน้าในระยะเวลาที่กำหนดในโปรแกรม หรือหน้าแรกของโปรแกรม ตัวแปร session จะหยุดทำงาน ค่าเริ่มต้นคือ 20 นาที: Timeout คุณสามารถตั้งค่าช่วงเวลาหยุดใช้งานที่ยาวขึ้นหรือสั้นขึ้นได้โดยตั้งค่า:

ตัวอย่างด้านล่างนี้ได้ตั้งค่าช่วงเวลาหยุดใช้งานเป็น 5 นาที:

<%
Session.Timeout=5
%>

เพื่อหยุดยั้ง session ทันที คุณสามารถใช้: Abandon วิธี:

<%
Session.Abandon
%>

สัญญาณเตือน:ปัญหาหลักที่เกี่ยวกับการใช้ session คือ ว่าเมื่อความยาวของ session จะสิ้นสุดลง ไม่รู้ว่าคำขอล่าสุดของผู้ใช้คือคำขอสุดท้ายหรือไม่ ดังนั้นไม่รู้ว่าควรให้ session ดำเนินต่อไปนานเท่าไหร่ การรอเวลาที่ยาวเกินไปสำหรับ session ที่ว่างอยู่จะใช้ความทรัพยากรของเซิร์ฟเวอร์ อย่างไร แต่หาก session ถูกลบไปเร็วเกินไป ผู้ใช้จะต้องเริ่มต้นใหม่อีกครั้ง เพราะเซิร์ฟเวอร์ได้ลบข้อมูลทั้งหมดออกไปแล้ว การหาช่วงเวลาที่เหมาะสมสำหรับช่วงเวลาหยุดใช้งานนั้นยาก:

คำเตือน:หากคุณใช้ตัวแปร session ไม่ต้องเก็บข้อมูลมากเกินไปในภายในมัน:

การเก็บและเรียกค่าตัวแปร session

ความดีที่สุดของตัวแปร Session คือคุณสามารถเก็บตัวแปรไว้ในภายในมัน เพื่อใช้ในหน้าเว็บต่อไป โดยเฉพาะที่มันสามารถใช้งานได้ทั่วไปอย่างง่ายดาย:

ตัวอย่างด้านล่างนี้จะใส่ค่า "Donald Duck" ในตัวแปร session ที่มีชื่อว่า username และใส่ค่า "50" ในตัวแปร session ที่มีชื่อว่า age:

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

เมื่อค่าถูกเก็บไว้ในตัวแปร session คุณสามารถใช้มันได้ในทุกหน้าของโปรแกรม ASP:

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

上面这行程序返回的结果是: "Welcome Donald Duck"。

也可以在 session 对象中保存用户参数,然后通过访问这些参数来决定向用户返回什么页面。

ในตัวอย่างด้านล่าง หากมีการตั้งค่าตัวแปร "screenres" ใน session ว่า "low" จะกลับมาเวอร์ชันข้อความของหน้าเว็บ:

<%If Session("screenres")="low" Then%> 
  นี่คือเวอร์ชันข้อความของหน้าเว็บ
<%Else%> 
  นี่คือเวอร์ชันสื่อสารทางสื่อสิ่งพิมพ์ของหน้าเว็บ
<%End If%>

ลบตัวแปรสำหรับ session

ชุด contents มีทั้งหมดตัวแปรสำหรับ session:

สามารถลบตัวแปรสำหรับ session ด้วยวิธี remove:

ในตัวอย่างด้านล่าง หากตัวแปร "age" ใน session มีค่าต่ำกว่า 18 ให้ลบตัวแปร "sale":

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

ถ้าต้องการลบทุกตัวแปรใน session ใช้วิธี RemoveAll:

<%
Session.Contents.RemoveAll()
%>

วนลูปชุด contents

ชุด contents มีทั้งหมดตัวแปรสำหรับ session สามารถเข้าถึงตัวแปรที่เก็บไว้ด้วยการวนลูปชุด contents:

<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
  Response.Write(i & "<br />")
Next
%>

ผลลัพธ์:

username
age

ถ้าต้องการรู้จำนวนรายการในชุด contents สามารถใช้ตัวแปร count ได้:

<%
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 variables: 2
Donald Duck
50

วนรอบ StaticObjects ชุด

จะสามารถเลือกค่าของสมาชิกของ StaticObjects ชุดโดยการวนรอบ

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