2009-06-08 20 views
6

使用Sql Server存儲和管理SessionState時,會話數據是否使用加密存儲在數據庫中?使用SQL Server的ASP.Net SessionState - 數據是否被加密?

當我查看ASPNet數據庫中的數據時,ASPStateTempSessions列中的「SessionItemLong」中的數據看起來是十六進制數據。這些數據在被存儲在數據庫中之前是否被加密?如果是這樣,那麼用於加密數據的密鑰在哪裏以及用於加密數據的算法是什麼?

此外,會話狀態使用序列化存儲對象。使用哪種序列化? (二進制或XML)

回答

12

那裏沒有加密。數據使用二進制序列化存儲(它比xml更快)。有關詳細信息,請參閱SessionStateUtility類(可以使用free Reflector進行瀏覽)。這是用於串行代碼:

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

你剛剛爲我節省了很多時間(試圖從數據庫中解擾一些BLOB);謝謝。 – 2009-11-13 13:56:22

6

最近我有這個問題,並有解構存儲狀態investigate a performance issue;粗略的代碼是這樣的:

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); 
     } 
    } 
} 
相關問題