۱۳۸۸/۰۶/۱۷

گزينه "مرا به خاطر بسپار" درست كار نمي‌كند


حالت forms authentication در ASP.Net ، امكان تعريف كوكي‌هايي ماندگار را نيز جهت ورود خودكار كاربران در دفعات بعدي بازديد آن‌ها فراهم مي‌كند. اما زمان منقضي شدن اين كوكي‌هاي ماندگار در ASP.Net 1.1 و ASP.Net 2.0 به بعد كاملا با هم متفاوت بوده و اگر برنامه نويس از اين تغيير حاصل شده مطلع نباشد ممكن است بارها و بارها برنامه را آزمايش كند اما نتيجه‌اي نگيرد.
مدت زمان منقضي شدن كوكي‌هاي ماندگار forms authentication در ASP.Net 1.1 به صورت زير است (بود):
زمان منقضي شدن كوكي سشن = زمان جاري + زمان منقضي شدن سشن كاربر
زمان منقضي شدن كوكي ماندگار (persistent) = زمان جاري + 50 سال

اين عدد 50 سال بسيار غيرمنطقي بوده و در ASP.Net 2.0 به بعد به صورت زير اصلاح شده است:
زمان منقضي شدن كوكي سشن = زمان جاري + زمان منقضي شدن سشن كاربر
زمان منقضي شدن كوكي ماندگار (persistent) = زمان جاري + زمان منقضي شدن سشن كاربر (پيش فرض آن 30 دقيقه است)

و جهت بيشتر كردن طول عمر اين ماندگاري بايد زمان مورد نظر را در وب كانفيگ به صورت زير اعمال كرد:

<authentication mode="Forms">
<forms

name="MyCookieName"
slidingExpiration="true"
timeout="43200"
/>
</authentication>
مطابق زمان تنظيم شده فوق كه بر حسب دقيقه است، اين كوكي به مدت يك ماه ماندگاري پيدا مي‌كند در غير اينصورت اعمال گزينه "مرا به خاطر بسپار" مطابق نظر شما كار نخواهد كرد و همانند ASP.Net 1.1 به صورت پيش فرض به 50 سال تنظيم نمي‌شود.

همچنين نكته‌ي مهم ديگري را كه بايد رعايت كرد، name ايي است كه در اين فايل config عنوان مي‌‌كنيد (در قسمت تنظيمات form authentication). اگر بر روي يك وب سرور، چندين برنامه وب ASP.Net را در حال اجرا داريد، بايد براي هر كدام از اين‌ها نامي جداگانه و منحصربفرد انتخاب كنيد، در غيراينصورت تداخل رخ داده و باز هم گزينه مرا به خاطر بسپار شما كار نخواهد كرد.

كار slidingExpiration كه در اينجا تنظيم شده است نيز به صورت زير مي‌باشد:
اگر لاگين موفقيت آميزي ساعت 5 عصر صورت گيرد و timeout شما به عدد 10 تنظيم شده باشد، اين لاگين به صورت خودكار در 5:10‌ منقضي خواهد شد. اما اگر در اين حين در ساعت 5:05 ، كاربر يكي از صفحات سايت شما را مرور كند، زمان منقضي شدن كوكي ذكر شده به 5:15 تنظيم خواهد شد. (مفهوم تنظيم slidingExpiration)
لازم به ذكر است كه اگر كاربر پيش از نصف زمان منقضي شدن كوكي (مثلا در 5:04)، يكي از صفحات را مرور كند، تغييري در اين زمان نهايي منقضي شدن رخ نخواهد داد.