2009-06-08 13 views
6

Wenn Sql Server den SessionState speichert und verwaltet, werden die Sitzungsdaten in der Datenbank mit Verschlüsselung gespeichert?ASP.Net SessionState mit SQL Server - ist die Daten verschlüsselt?

Wenn ich auf die Daten in der ASPNet-Datenbank schaue, scheinen die Daten in der "SessionItemLong" in den ASPStateTempSessions-Spalten hexadezimale Daten zu sein. Werden diese Daten verschlüsselt, bevor sie in der Datenbank gespeichert werden? Und wenn ja, wo wird der Schlüssel verwendet, um die Daten zu verschlüsseln und welcher Algorithmus wird verwendet, um die Daten zu verschlüsseln?

Außerdem speichert der Sitzungsstatus das Objekt mithilfe der Serialisierung. Welche Serialisierung wird verwendet? (Binär oder XML)

Antwort

12

Dort gibt es keine Verschlüsselung. Die Daten werden mit binärer Serialisierung gespeichert (es ist viel schneller als XML). Weitere Informationen finden Sie in der SessionStateUtility-Klasse (Sie können sie mit free Reflector durchsuchen). Dies ist der Code, der für die Serialisierung verwendet wird:

internal static void Serialize(SessionStateStoreData item, Stream stream) 
{ 
    bool flag = true; 
    bool flag2 = true; 
    BinaryWriter writer = new BinaryWriter(stream); 
    writer.Write(item.Timeout); 
    if ((item.Items == null) || (item.Items.Count == 0)) 
    { 
     flag = false; 
    } 
    writer.Write(flag); 
    if ((item.StaticObjects == null) || item.StaticObjects.NeverAccessed) 
    { 
     flag2 = false; 
    } 
    writer.Write(flag2); 
    if (flag) 
    { 
     ((SessionStateItemCollection) item.Items).Serialize(writer); 
    } 
    if (flag2) 
    { 
     item.StaticObjects.Serialize(writer); 
    } 
    writer.Write((byte) 0xff); 
} 
+0

Sie haben mir gerade viel Zeit gespart (versuchen, einige BLOBs von der db zu entschlüsseln); Vielen Dank. –

6

ich dieses Problem vor kurzem hatte, und musste gespeicherten Zustand zu investigate a performance issue dekonstruieren; der grobe code war so etwas wie:

byte[] blob = ... // TODO 
using (var ms = new MemoryStream(blob)) 
using (BinaryReader reader = new BinaryReader(ms)) { 
    int len = reader.ReadInt32(); 
    bool f1 = reader.ReadBoolean(), f2 = reader.ReadBoolean(); 
    SessionStateItemCollection items = null; 
    HttpStaticObjectsCollection sitems = null; 
    if (f1) { 
     items = SessionStateItemCollection.Deserialize(reader); 
    } 
    if (f2) { 
     sitems = HttpStaticObjectsCollection.Deserialize(reader); 
    } 
    if (reader.ReadByte() != 0xFF) { 
     throw new InvalidOperationException("corrupt"); 
    } 
    if (items != null) { 
     int max = items.Count; 
     for (int i = 0; i < max; i++) { 
      object obj = items[i]; 
      Console.WriteLine("{0}\t{1}", items.Keys[i], 
       obj == null ? "n/a" : obj.GetType().FullName); 
     } 
    } 
} 
Verwandte Themen