في ASP.NET، متى يجب علي استخدام Session.Clear() بدلاً من Session.Abandon()؟

StackOverflow https://stackoverflow.com/questions/347377

سؤال

يتخلص كل من Session.Clear() وSession.Abandon() من متغيرات الجلسة.كما أفهمها، ينهي Abandon() الجلسة الحالية، ويتسبب في إنشاء جلسة جديدة مما يؤدي إلى إطلاق حدثي End وStart.

يبدو من الأفضل استدعاء Abandon() في معظم الحالات، مثل تسجيل خروج المستخدم.هل هناك سيناريوهات يمكنني فيها استخدام Clear() بدلاً من ذلك؟هل هناك فرق كبير في الأداء؟

هل كانت مفيدة؟

المحلول

Session.Abandon() يدمر الجلسة و ال حدث Session_OnEnd يتم تشغيل.

Session.Clear() فقط يزيل كافة القيم (المحتوى) من الكائن.الجلسة بنفس المفتاح لا تزال حية.

لذلك، إذا كنت تستخدم Session.Abandon(), ، ستفقد تلك الجلسة المحددة وسيحصل المستخدم على مفتاح جلسة جديد.يمكنك استخدامه على سبيل المثال عندما يقوم المستخدم بتسجيل الخروج.

يستخدم Session.Clear(), ، إذا كنت تريد أن يبقى المستخدم في نفس الجلسة (إذا كنت لا تريد أن يقوم المستخدم بإعادة تسجيل الدخول على سبيل المثال) وإعادة تعيين جميع البيانات الخاصة بالجلسة.

نصائح أخرى

وفقط باستخدام Session.Clear () عند تسجيل دخول المستخدم من يمكن أن تشكل ثغرة أمنية. كما الدورة لا تزال صالحة بقدر ما يتعلق الأمر خادم ويب. ومن ثم مسألة تافهة إلى حد معقول على شم، والاستيلاء الدورة رقم، واختطاف تلك الدورة.

لهذا السبب، عند تسجيل الدخول للمستخدم من أنه سيكون أكثر أمانا وأكثر عقلانية لاستخدام Session.Abandon () بحيث يتم تدمير الدورة، وجلسة جديدة تم إنشاؤها (على الرغم من صفحة تسجيل الخروج UI سيكون جزءا من دورة جديدة، أن الدورة الجديدة ليس لديها أي من التفاصيل مستخدمين في ذلك، وسوف اختطاف الدورة الجديدة معادلا لعقد دورة جديدة، وبالتالي سيكون من البكم).

وأنا ما زلت غير متأكد ما هو مثال العالم الحقيقي حيث كنت تستخدم Session.Abondon()، Session.Clear().

وأستطيع أن أفهم ... إذا كان المستخدم بالنقر فوق ارتباط الخروج وأنت نقلهم الى بك "لقد تم تسجيل الخروج" الصفحة .... جلسة المتصفح ما زالت مستمرة ولكن هل تريد إزالة المعلومات المخزنة في الدورة. إذا كنت abondoned الدورة ثم سيتم إنشاء جلسة عمل جديدة على الفور ل"لقد تم تسجيل الخروج" على الصفحة.

وSession.Abandon يدمر الدورة كما هو مذكور أعلاه لذلك يجب عليك استخدام هذا عند تسجيل شخص ما. أعتقد أن من حسن استخدام Session.Clear يكون لسلة التسوق على موقع للتجارة الإلكترونية. وبهذه الطريقة يحصل مسح سلة من دون تسجيل الخروج للمستخدم.

وكان لي هذه المسألة وحاول كلا، لكنه اضطر الى تسوية لإزالة حماقة مثل "pageEditState"، ولكن ليس إزالة معلومات المستخدم ئلا لا بد لي من البحث عنه مرة أخرى.

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top