7

Sql Server を使用して SessionState を保存および管理する場合、セッション データは暗号化を使用してデータベースに保存されますか?

ASPNet データベースのデータを見ると、ASPStateTempSessions 列の「SessionItemLong」のデータが 16 進数データのように見えます。このデータはデータベースに保存される前に暗号化されていますか? もしそうなら、データの暗号化に使用されている鍵はどこにあり、データの暗号化に使用されているアルゴリズムは何ですか?

また、Session 状態はシリアライゼーションを使用してオブジェクトを格納します。どのシリアライゼーションが使用されていますか? (バイナリまたは XML)

4

2 に答える 2

13

そこには暗号化はありません。データはバイナリ シリアライゼーションを使用して保存されます (xml よりもはるかに高速です)。詳細については、SessionStateUtility クラスを参照してください (無料の 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);
}
于 2009-06-09T00:09:54.670 に答える
9

最近この問題が発生し、パフォーマンスの問題を調査するために保存された状態を分解する必要がありました。大まかなコードは次のようなものでした:

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);
        }
    }
}
于 2009-11-15T10:00:03.700 に答える