文
Crooze21著Backup and Restore Session in .Net 2.0
icscs翻译for msproject.cn
简介
文章里的代码将把你的session数据备份到字符流中。如果你的网站可以切换用户,或者模仿其他用户的时候,非常有用。你可以存储这些字符流到一个新创建的session中,而且,很容易将这些数据恢复到以前的老的session里。尤其,可以运用于使用SQL membership及使用cookies来维护登录、注销的情况。
背景
需要你了解一些session的工作原理。
代码使用
下面的两个方法一个用来备份session,一个用来还原session,他们都非常通用,我相信你不会需要改动代码。
具体示例如下:
Function BackupSession() As Byte()
Dim objSessionData As New SessionState.SessionStateItemCollection
Dim objStream As New System.IO.MemoryStream
Dim objWriter As New System.IO.BinaryWriter(objStream)
For i As Integer = 0 To Me.Session.Count - 1
objSessionData.Item(Me.Session.Keys(i)) = Me.Session.Item(i)
Next
objSessionData.Serialize(objWriter)
Return objStream.ToArray
End Function
Sub RestoreSession(ByVal prevSessionData As Byte())
Dim objStream As New System.IO.MemoryStream
Dim objRedaer As New System.IO.BinaryReader(objStream)
Dim objPrevSession As SessionState.SessionStateItemCollection
objStream.Write(prevSessionData, 0, prevSessionData.Length)
objStream.Seek(0, IO.SeekOrigin.Begin)
objPrevSession = SessionState.SessionStateItemCollection.Deserialize(objRedaer)
For Each key As String In objPrevSession.Keys
Me.Session(key) = objPrevSession.Item(key).ToString
Next
End Sub
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim prevSessionData As Byte()
prevSessionData = Me.BackupSession()
Me.Session.Clear()
'Signout and clear all the cookies of the user.
'Signin new user using new cookie and create new session.
Session("PrevSession") = prevSessionData
'Now when you swith user or cancel emulation, I mean go back to original user.
prevSessionData = nothing
prevSessionData = CType(Session("PrevSession"), Byte())
'Do signin and signout here then
Me.RestoreSession(prevSessionData)
End Sub
本文作者:icscs 来源:http://www.msproject.cn/
CIO之家 www.ciozj.com 微信公众号:imciow