惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Vulnerabilities – Threatpost
S
Secure Thoughts
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AWS News Blog
AWS News Blog
C
CERT Recently Published Vulnerability Notes
博客园 - 【当耐特】
量子位
有赞技术团队
有赞技术团队
腾讯CDC
P
Proofpoint News Feed
小众软件
小众软件
T
Tor Project blog
Cisco Talos Blog
Cisco Talos Blog
博客园 - 三生石上(FineUI控件)
L
LINUX DO - 热门话题
人人都是产品经理
人人都是产品经理
罗磊的独立博客
M
MIT News - Artificial intelligence
阮一峰的网络日志
阮一峰的网络日志
爱范儿
爱范儿
A
About on SuperTechFans
月光博客
月光博客
G
GRAHAM CLULEY
P
Privacy & Cybersecurity Law Blog
P
Palo Alto Networks Blog
K
Kaspersky official blog
Latest news
Latest news
C
Cisco Blogs
I
Intezer
L
Lohrmann on Cybersecurity
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
P
Privacy International News Feed
Scott Helme
Scott Helme
Google DeepMind News
Google DeepMind News
S
Security @ Cisco Blogs
T
The Blog of Author Tim Ferriss
S
Securelist
PCI Perspectives
PCI Perspectives
V
Visual Studio Blog
Simon Willison's Weblog
Simon Willison's Weblog

博客园 - squirrel_sc

强人工智能:抑制神经元的意义 强人工智能基本问题:全局控制与自组织 程序员,为未来准备好了吗? 强人工智能基本问题:自上而下,还是自下而上。 强人工智能基本问题:神经网络分层还是不分层 什么阻碍了强人工智能的发展 人类和强人工智能的关系(人类会被灭掉吗?) 为什么需要强人工智能 神经网络和机器学习、强人工智能 重新开张! 招全职asp.net中高级程序员 使用批处理出现奇怪的现象 asp.net设置默认按钮的一种方法(041217更新) httpcompress实际效果能有多少? 大Sql的切分执行 轻量级的数据库访问类 041104版 vb.net和C#开发环境和开发效率的比较 被.net郁闷的一天 IE5下通过、不会被列表框遮挡的日期控件
遍历所有session并取值
squirrel_sc · 2004-12-28 · via 博客园 - squirrel_sc

    首先要说明的是,该方法仅对将session存放于sql server中有效。很多人说session存放于sql server中效率太低,我觉得这只能说低一些,不能说太低。这其中的好处更大一些,如果将session存放在进程内,应用程序一重启就没了,有时候很麻烦;存放在进程外和存放在数据库中效率几乎一样。

这个类是从.net framework的源码里得到的,删除了updatesession的部分,只保留了获得session的部分,可以单独作为一个类或者放在类中做私有类使用。

#Region "分析Session的私有类"
    Private Class altSerialization
        
' Methods
        Shared Sub New()
            
Dim typeArray1 As Type() = New Type(21) {}
            typeArray1(
1= GetType(String)
            typeArray1(
2= GetType(Integer)
            typeArray1(
3= GetType(Boolean)
            typeArray1(
4= GetType(DateTime)
            typeArray1(
5= GetType(Decimal)
            typeArray1(
6= GetType(Byte)
            typeArray1(
7= GetType(Char)
            typeArray1(
8= GetType(Single)
            typeArray1(
9= GetType(Double)
            typeArray1(
10= GetType(SByte)
            typeArray1(
11= GetType(Short)
            typeArray1(
12= GetType(Long)
            typeArray1(
13= GetType(UInt16)
            typeArray1(
14= GetType(UInt32)
            typeArray1(
15= GetType(UInt64)
            typeArray1(
16= GetType(TimeSpan)
            typeArray1(
17= GetType(Guid)
            typeArray1(
18= GetType(IntPtr)
            typeArray1(
19= GetType(UIntPtr)
            altSerialization.s_serializedTypes 
= typeArray1
        
End Sub


        
Private Sub New()
        
End Sub


        
Public Shared Function ReadValueFromStream(ByVal reader As BinaryReader) As Object
            
Dim numArray1 As Integer()
            
Dim num1 As Integer
            
Dim buffer1 As Byte()
            
Dim formatter1 As System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            
Dim obj1 As Object = Nothing
            
Select Case CType(reader.ReadByte, TypeID)
                
Case CType(CType(CType(1, TypeID), TypeID), TypeID)
                    
Return reader.ReadString
                
Case CType(CType(CType(2, TypeID), TypeID), TypeID)
                    
Return reader.ReadInt32
                
Case CType(CType(CType(3, TypeID), TypeID), TypeID)
                    
Return reader.ReadBoolean
                
Case CType(CType(CType(4, TypeID), TypeID), TypeID)
                    
Return New DateTime(reader.ReadInt64)
                
Case CType(CType(CType(5, TypeID), TypeID), TypeID)
                    numArray1 
= New Integer(4) {}
                    num1 
= 0
                    
GoTo Label_00CA
                
Case CType(CType(CType(6, TypeID), TypeID), TypeID)
                    
Return reader.ReadByte
                
Case CType(CType(CType(7, TypeID), TypeID), TypeID)
                    
Return reader.ReadChar
                
Case CType(CType(CType(8, TypeID), TypeID), TypeID)
                    
Return reader.ReadSingle
                
Case CType(CType(CType(9, TypeID), TypeID), TypeID)
                    
Return reader.ReadDouble
                
Case CType(CType(CType(10, TypeID), TypeID), TypeID)
                    
Return reader.ReadSByte
                
Case CType(CType(CType(11, TypeID), TypeID), TypeID)
                    
Return reader.ReadInt16
                
Case CType(CType(CType(12, TypeID), TypeID), TypeID)
                    
Return reader.ReadInt64
                
Case CType(CType(CType(13, TypeID), TypeID), TypeID)
                    
Return reader.ReadUInt16
                
Case CType(CType(CType(14, TypeID), TypeID), TypeID)
                    
Return reader.ReadUInt32
                
Case CType(CType(CType(15, TypeID), TypeID), TypeID)
                    
Return reader.ReadUInt64
                
Case CType(CType(CType(16, TypeID), TypeID), TypeID)
                    
Return New TimeSpan(reader.ReadInt64)
                
Case CType(CType(CType(17, TypeID), TypeID), TypeID)
                    buffer1 
= reader.ReadBytes(16)
                    
Return New Guid(buffer1)
                
Case CType(CType(CType(18, TypeID), TypeID), TypeID)
                    
If (IntPtr.Size = 4Then
                        
Return New IntPtr(reader.ReadInt32)
                    
End If
                    
GoTo Label_01D3
                
Case CType(CType(CType(19, TypeID), TypeID), TypeID)
                    
If (UIntPtr.Size = 4Then
                        
Return New UIntPtr(reader.ReadUInt32)
                    
End If
                    
GoTo Label_0201
                
Case CType(CType(CType(20, TypeID), TypeID), TypeID)
                    formatter1 
= New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
                    
Return formatter1.Deserialize(reader.BaseStream)
                
Case CType(CType(CType(21, TypeID), TypeID), TypeID)
                    
GoTo Label_022B
            
End Select
            
Return obj1
Label_00BD:
            numArray1(num1) 
= reader.ReadInt32
            num1 
= (num1 + 1)
Label_00CA:
            
If (num1 < 4Then
                
GoTo Label_00BD
            
End If
            
Return New Decimal(numArray1)
Label_01D3:
            
Return New IntPtr(reader.ReadInt64)
Label_0201:
            
Return New UIntPtr(reader.ReadUInt64)
Label_022B:
            
Return Nothing
        
End Function


        
' Fields
        Private Shared s_serializedTypes As Type()

        
' Nested Types
        Private Enum TypeID
            
' Fields
            [Boolean= 3
            [
Byte= 6
            [
Char= 7
            DateTime 
= 4
            [
Decimal= 5
            [
Double= 9
            Guid 
= 17
            Int16 
= 11
            Int32 
= 2
            Int64 
= 12
            IntPtr 
= 18
            [Null] 
= 21
            [
Object= 20
            SByte 
= 10
            [
Single= 8
            [
String= 1
            TimeSpan 
= 16
            UInt16 
= 13
            UInt32 
= 14
            UInt64 
= 15
            UIntPtr 
= 19
        
End Enum

    
End Class

#
End Region

使用它的核心代码(.net framework对我抛弃的几个bool以及数值进行了一些判断,我没有深究,有朋友研究过的请指点一下。)

使用实例:
该方法用于遍历所有session,形成在线用户列表。由于这个操作可能效率较低,所以把结果在内存中缓存1分钟。用户名存在名为UserName的session中。


关于设置:
我使用的是信任连接,在XP下就是aspnet用户,ASPState数据库就是它的,所以访问数据库的权限上没有问题。session存放在sql server中要使用持久的那种,如果是存放在tempDb中的,一重启机器后,权限就要重新设置,很苦恼。