‫۸ سال و ۹ ماه قبل، شنبه ۲۱ آذر ۱۳۹۴، ساعت ۰۱:۰۹
با نگارش بعدی ASP.NET، مباحث Global.asax ، HTTP Module و امثال آن به طور کامل حذف خواهند شد. به همین جهت ASP.NET Identity از OWIN استفاده می‌کند که پایه‌ی ASP.NET 5 است و در اینجا از OWIN Middleware ‌ها برای این نوع سفارشی سازی‌ها کمک می‌گیرند.
‫۸ سال و ۱۰ ماه قبل، پنجشنبه ۱۹ آذر ۱۳۹۴، ساعت ۱۵:۳۸
«... حذف آدرس درخواست جاری موجب میشه محدودیت کمتری اعمال بشه و بهتره اینکار صورت نگیره ...»
محدودیت کمتر در پارامترهای بررسی، آن‌را عمومی‌تر می‌کند و کل سایت را پوشش می‌دهد؛ تا اگر در یک صفحه بلاک شد، نتواند سایر صفحات و آدرس‌ها را به ترتیب اسپم کند.
‫۸ سال و ۱۰ ماه قبل، پنجشنبه ۱۹ آذر ۱۳۹۴، ساعت ۱۴:۲۸
با تشکر از شما. چند نکته از لاگ‌های استخراج شده‌ی سایت جاری:
- این برنامه‌ها، user agent‌های متفاوتی را به ازای هر درخواست ارسال می‌کنند (عموما). بنابراین مورد دوم هم علاوه بر مورد سوم نباید بکار گرفته شود.
- دو نوع هش در حالت کلی وجود دارند. هش‌های سریع و هش‌های امن. هش‌های امن سعی می‌کنند این تضمین را ارائه دهند که به ازای یک ورودی مشخص، خروجی منحصربفردی را تولید کنند؛ اما ... با قیمت کندتر بودن عملیات هش. هش‌های سریع، مانند xxHash، برای یک چنین مواردی که نیاز هست کلید کش تولید شود بکار گرفته می‌شوند. الزاما مانند هش‌های امن سعی در تولید خروجی‌های منحصربفردی نمی‌کنند، اما تا این اندازه دقیق هستند که در بانک‌های اطلاعاتی key-value store فوق سریعی مانند Redis از آن‌ها استفاده می‌شود. بنابراین در یک چنین مواردی مانند سناریوی جاری بهتر است از هش‌های سریع استفاده شود. البته اگر آدرس صفحه و همچنین UA را حذف کنیم، نیازی به هش کردن نخواهد بود؛ چون IP را می‌توان بعنوان کلید درنظر گرفت.
- بررسی UA از دیدگاه دیگری به صورت جداگانه می‌تواند مفید باشد. تشخیص بات‌های شناخته شده و بستن دسترسی آن‌ها.
‫۸ سال و ۱۰ ماه قبل، چهارشنبه ۱۸ آذر ۱۳۹۴، ساعت ۱۵:۵۵
یک نکته‌ی تکمیلی
در ویندوز 10 که تقویم شمسی آن انتخاب شده، فرض کنید قصد داریم رشته‌ی زیر را به تاریخ معادل آن تبدیل کنیم:
const string dateTime = "Wed, 17 Apr 2013 12:10:18 GMT";
Console.WriteLine(DateTime.Parse(dateTime));
این کد با خطای زیر که بیانگر قابل تفسیر نبودن روز Wed است خاتمه می‌یابد:
 String was not recognized as a valid DateTime because the day of week was incorrect.
راه حل:
شبیه به مطلب «تاثیر فرهنگ جاری سیستم بر روی اعداد در دات نت» در اینجا نیز باید از CultureInfo.InvariantCulture استفاده کرد:
 Console.WriteLine(DateTime.Parse(dateTime, CultureInfo.InvariantCulture));
‫۸ سال و ۱۰ ماه قبل، سه‌شنبه ۱۰ آذر ۱۳۹۴، ساعت ۲۰:۰۷
بهتر است روش service locator یا «context.OwinContext.GetUserManager» را به روش « اعمال تزریق وابستگی‌ها به مثال رسمی ASP.NET Identity» تغییر دهید تا تزریق وابستگی‌ها به نحو بهتری انجام شوند و با سربار کمتری.
‫۸ سال و ۱۰ ماه قبل، شنبه ۷ آذر ۱۳۹۴، ساعت ۲۲:۴۲
اگر قرار هست layout به ازای هر کاربر مختلف، جداگانه کش شود و در آن layout، اطلاعات خاص هر کاربر درج شده که از هر کاربر به کاربر دیگری متفاوت است (تنها دلیل منطقی کش نکردن layout) باید varyByCustom را مقدار دهی و پیاده سازی کرد. برای مثال یک پروفایل مخصوص را در web.config تعریف می‌کنید:
<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="Dashboard" duration="86400" varyByParam="*" varyByCustom="User" location="Server" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>
جایی که قرار است view نمایش داده شود، این پروفایل را تنظیم خواهید کرد (در MVC کار نمایش View از View شروع نمی‌شود):
[OutputCache(CacheProfile="Dashboard")]
public class DashboardController : Controller { ...}
سپس باید در فایل global.asax.cs پیاده سازی و مقدار دهی varyByCustom، به ازای کاربران مختلف لاگین شده، انجام شود:
    //string arg filled with the value of "varyByCustom" in your web.config
    public override string GetVaryByCustomString(HttpContext context, string arg)
    {
        if (arg == "User")
             {
             // depends on your authentication mechanism
             return "User=" + context.User.Identity.Name;
             //?return "User=" + context.Session.SessionID;
             }

        return base.GetVaryByCustomString(context, arg);
    }
به این صورت view رندر شده، به ازای هر کاربر لاگین شده به صورت جداگانه کش می‌شود و این کش شدن به صورت عمومی، برای تمام کاربران و به یک شکل نیست.
‫۸ سال و ۱۰ ماه قبل، شنبه ۷ آذر ۱۳۹۴، ساعت ۱۹:۴۷
OutputCache را به DonutOutputCache تغییر دهید؛ مشکل حل می‌شود (رفع تمام این محدودیت‌ها در آن لحاظ شده‌است).