2009-06-08 8 views
6

सत्रस्टेट को स्टोर और प्रबंधित करने के लिए SQL सर्वर का उपयोग करते समय, एन्क्रिप्शन का उपयोग कर डेटाबेस में संग्रहीत सत्र डेटा है?एसएसपी सर्वर का उपयोग कर ASP.Net सत्रस्टेट - डेटा एन्क्रिप्टेड है?

जब मैं एएसपीनेट डेटाबेस में डेटा को देखता हूं, तो ASPStateTempSessions कॉलम में "सत्र ItemLong" में डेटा हेक्साडेसिमल डेटा प्रतीत होता है। क्या यह डेटा डेटाबेस में संग्रहीत होने से पहले एन्क्रिप्ट किया जा रहा है? और यदि हां, तो डेटा को एन्क्रिप्ट करने के लिए उपयोग की जाने वाली कुंजी और डेटा को एन्क्रिप्ट करने के लिए एल्गोरिदम का उपयोग किस प्रकार किया जा रहा है?

इसके अलावा, सत्र राज्य क्रमबद्धता का उपयोग करके वस्तु को संग्रहीत करता है। कौन सा धारावाहिक उपयोग किया जाता है? (बाइनरी या एक्सएमएल)

उत्तर

12

वहां कोई एन्क्रिप्शन नहीं है। डेटा बाइनरी क्रमिकरण का उपयोग करके संग्रहीत किया जाता है (यह xml एक से अधिक तेज़ है)। विवरण के लिए सत्रस्टेट यूटिलिटी क्लास देखें (आप इसे 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

आपने मुझे अभी बहुत समय बचाया है (डीबी से कुछ बीएलओबी को अवरुद्ध करने की कोशिश कर रहा है); धन्यवाद। –

6

मैं हाल ही में इस समस्या थी, और investigate a performance issue को संग्रहीत राज्य deconstruct करने के लिए था, किसी न किसी कोड की तरह कुछ था:

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); 
     } 
    } 
} 
संबंधित मुद्दे