Hantera sessionsvariabler i ASP.NET # 1
Förord
Behovet av att hantera information om en besökare över flera sidor, en session eller vid återkommande besök har de flesta sajter som inte bara är en ren presentationssida. Hanteringen av cookies och sessionsvariabler är inte olik den i traditionell ASP. Denna artikelserie går igenom hur man kan skapa ett system för att hantera dessa variabler smidigt och som i sidklasserna är oberoende av lagring. Dessutom hjälper kompilatorn dig att upptäcka fel i koden.
Det traditionella sättet
Cookies och sessionvariabler är inte precis någon nyhet i ASP.NET. Det går att använda dem ungefär som i traditionell ASP.
Response.Cookies.Add(New HttpCookie("UserName", userNameString))
userNameString = Request.Cookies("UserName").Value
Session("UserName") = userNameString
userNameString = CType(Session("UserName"), String)
När ditt projekt växer och kanske flera programmerare är inblandade blir det bökigt att hålla reda på var och hur variablerna används. Det är inte lämpligt att peta in kod som i ovanstående exempel i sidor här och där. I bästa fall kanske du i traditionell ASP använt dig av inkluderade filer eller en komponent som exponerat värdena.
Ett steg tillbaks
I denna del av artikeln bortser vi från lagring informationen mellan http anropen. Vårt behov är att på ett smidigt sätt kunna läsa och skriva variabler. Vi skapar en klass i vårt webbprojekt eller annat projekt som webbprojektet har en referens till.
Public Class WebVisitor
Public Const ContextKey As String = "WebVisitor"
Private mFirstName As String
Private mLastName As String
Public Property FirstName() As String
Get
Return mFirstName
End Get
Set(ByVal Value As String)
mFirstName = Value
End Set
End Property
Public Property LastName() As String
Get
Return mLastName
End Get
Set(ByVal Value As String)
mLastName = Value
End Set
End Property
Public Function FullName() As String
Return FirstName & " " & LastName
End Function
End Class
Attributet Serializable anger att klassen kan serialiseras, dvs sparas till sträng, fil etc. För övrigt så kapslas medlemsvariabler in och exponeras som egenskaper i klassen.
Åtkomst till WebVisitor instanser
För att få smidig åtkomst till besökarens instans av WebVisitor klassen kan vi skapa en basklass för alla våra webbsidesklasser i projektet.
Basklassen
I basklassen skapar vi åtkomst till WebVisitor instansen med Visitor egenskapen. I detta fall hämtas instansen från sessionsobjektet.
Public Class PageBase
Inherits System.Web.UI.Page
Protected ReadOnly Property Visitor() As WebVisitor
Get
Return CType(Session(WebVisitor.ContextKey), WebVisitor)
End Get
End Property
End Class
Basklassen kan även användas för att implementera andra metoder som kommer användas återkommande.
Codebehind klasserna
Alla sidor i ditt webbprojekt som kan tänkas behöva åtkomst till sessionsvariabler skall ändras. Efter ändringen kontrolleras dessutom åtkomsten till variablerna av kompilatorn, det blir lätt att finna felen.
Public Class TestPage
'Inherits System.Web.UI.Page
Inherits PageBase
Protected WithEvents fullNameLabel As System.Web.UI.WebControls.Label
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
fullNameLabel.Text = Visitor.FullName
End Sub
...
End Class
Visitor egenskapen kan även användas direkt i aspx-filen.
0 Kommentarer