首页  ·  知识 ·  云计算
ASP.NET2.0下Session的备份和还原
icscs  http://www.msproject.cn/  综合  编辑:dezai  图片来源:网络
文Crooze21著Backup and Restore Session in .Net 2.0icscs翻译for msproject.cn 简介文章里的代码将把你的session数据备份到字符流中


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
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读