File: ISessionStateStore.cs

package info (click to toggle)
mono 6.8.0.105%2Bdfsg-3.3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,284,512 kB
  • sloc: cs: 11,172,132; xml: 2,850,069; ansic: 671,653; cpp: 122,091; perl: 59,366; javascript: 30,841; asm: 22,168; makefile: 20,093; sh: 15,020; python: 4,827; pascal: 925; sql: 859; sed: 16; php: 1
file content (163 lines) | stat: -rw-r--r-- 6,839 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//------------------------------------------------------------------------------
// <copyright file="SessionStateStore.cs" company="Microsoft">
//     Copyright (c) Microsoft Corporation.  All rights reserved.
// </copyright>                                                                
//------------------------------------------------------------------------------

/*
 * SessionStateStoreProviderBase
 * 
 */
namespace System.Web.SessionState {
    using System.Xml;
    using System.Security.Permissions;
    using System.Configuration.Provider;
    using System.Collections.Specialized; 

    [FlagsAttribute()]
    internal enum SessionStateItemFlags : int {
        None =                          0x00000000,
        Uninitialized =                 0x00000001,
        IgnoreCacheItemRemoved =        0x00000002
    }

    [FlagsAttribute()]
    public enum SessionStateActions : int {
        None  =             0x00000000,
        InitializeItem =    0x00000001
    }

    // This interface is used by SessionStateModule to read/write the session state data
    public abstract class SessionStateStoreProviderBase : ProviderBase {
        public abstract void Dispose();

        // Called by SessionStateModule to notify the provider that Session_End is defined
        // in global.asax, and so when an item expires, it should call the expireCallback
        // If the provider does not support session expiry, it should return false.
        public abstract bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback);
        
        // Called at the beginning of the AcquireRequestState event
        public abstract void InitializeRequest(HttpContext context);

        // Get and return a SessionStateStoreData. 
        // Please note that we are implementing a reader/writer lock mechanism.
        //
        // If successful:
        //  - returns the item
        //
        // If not found:
        //  - set 'locked' to false
        //  - returns null
        //
        // If the item is already locked by another request:
        //  - set 'locked' to true
        //  - set 'lockAge' to how long has the item been locked
        //  - set 'lockId' to the context of the lock
        //  - returns null
        public abstract SessionStateStoreData GetItem(HttpContext context,
                                        String id, 
                                        out bool locked,
                                        out TimeSpan lockAge, 
                                        out object lockId,
                                        out SessionStateActions actions);

        // Get and lock a SessionStateStoreData. 
        // Please note that we are implementing a reader/writer lock mechanism.
        //
        // If successful:
        //  - set 'lockId' to the context of the lock
        //  - returns the item
        //
        // If not found:
        //  - set 'locked' to false
        //  - returns null
        //
        // If the item is already locked by another request:
        //  - set 'locked' to true
        //  - set 'lockAge' to how long has the item been locked
        //  - set 'lockId' to the context of the lock
        //  - returns null
        public abstract SessionStateStoreData GetItemExclusive(HttpContext context, 
                                                String id, 
                                                out bool locked,
                                                out TimeSpan lockAge, 
                                                out object lockId,
                                                out SessionStateActions actions);

        // Unlock an item locked by GetExclusive
        // 'lockId' is the lock context returned by previous call to GetExclusive
        public abstract void ReleaseItemExclusive(HttpContext context, 
                                                    String id, 
                                                    object lockId);

        // Write an item.  
        // Note: The item is originally obtained by GetExclusive
        // Because SessionStateModule will release (by ReleaseExclusive) am item if 
        // it has been locked for too long, so it is possible that the request calling
        // Set() may have lost the lock to someone else already.  This can be
        // discovered by comparing the supplied lockId with the lockId value 
        // stored with the state item.
        public abstract void SetAndReleaseItemExclusive(HttpContext context, 
                                    String id, 
                                    SessionStateStoreData item, 
                                    object lockId, 
                                    bool newItem);
        
        // Remove an item.  See the note in Set.
        public abstract void RemoveItem(HttpContext context, 
                                        String id, 
                                        object lockId, 
                                        SessionStateStoreData item);

        // Reset the expire time of an item based on its timeout value
        public abstract void ResetItemTimeout(HttpContext context, String id);

        // Create a brand new SessionStateStoreData. The created SessionStateStoreData must have
        // a non-null ISessionStateItemCollection.
        public abstract SessionStateStoreData CreateNewStoreData(HttpContext context, int timeout);

        public abstract void CreateUninitializedItem(HttpContext context, String id, int timeout);

        // Called during EndRequest event
        public abstract void EndRequest(HttpContext context);

        internal virtual void Initialize(string name, NameValueCollection config, IPartitionResolver partitionResolver) {
        }
    }

    public class SessionStateStoreData {
        ISessionStateItemCollection      _sessionItems;
        HttpStaticObjectsCollection _staticObjects;
        int                         _timeout;

        public SessionStateStoreData(ISessionStateItemCollection sessionItems,
                                    HttpStaticObjectsCollection staticObjects,
                                    int timeout) {
            _sessionItems = sessionItems;
            _staticObjects = staticObjects;
            _timeout = timeout;
        }

        virtual public ISessionStateItemCollection Items { 
            get {
                return _sessionItems;
            }
        }
        
        virtual public HttpStaticObjectsCollection StaticObjects { 
            get {
                return _staticObjects;
            }
        }
        
        virtual public int Timeout { 
            get {
                return _timeout;
            }
            
            set {
                _timeout = value;
            }
        }
    }
}