استخدام ملفات تعريف الارتباط لتخزين الدورة في ASP MVC

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

  •  22-07-2019
  •  | 
  •  

سؤال

تخزين الدورة بأكملها في أحد ملفات تعريف الارتباط القياسية في القضبان على مدى السنوات القليلة الماضية - هل هناك طريقة سهلة لتحقيق شيء مماثل مع ASP MVC?

بشكل افتراضي أي شيء في الدورة / TempData يتم تخزينها في الذاكرة على الملقم.في شبكة الإنترنت.التكوين هذا يمكن أن تتغير إلى SQL تخزين / server-side ذاكرة التخزين المؤقت.أود أن تكون قادرة على الحصول على هذه الكائنات استمرت في ملف تعريف الارتباط.

يبدو أنني يمكن أن تنفذ مخصص الدورة-الدولة موفر مخزن.هل هناك أبسط النهج ؟

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

المحلول

نعم, تنفيذ مخصص الدولة الدورة-مزود.و لا afaik ليس هناك أبسط النهج.

Ps.أنها ليست سيئة كما يبدو أي> نصف odbc عينة كتابة db.

نصائح أخرى

وأعتقد أنه سيكون أكثر فعالية بكثير من مجرد تخزين معرف جلسة (تجزئة أو أيا كان) في ملف تعريف الارتباط، ومن ثم استخدام هذا الرقم للحصول على بيانات الجلسة من ذاكرة / قاعدة بيانات / مهما تخزين كنت تفضل ذلك. الحفاظ على حالة جلسة كاملة في زيادة عرض النطاق الترددي الكعكة innecessarily.

وأيضا، والحفاظ على الأمن في الاعتبار: إذا كان الكوكي يحتوي على معلومات المصادقة أو غيرها من البيانات الحساسة وكنت غير دقيق، فإنه يمكن بسهولة اختراق من قبل المستخدم للحصول على امتيازات أو الفوضى على خلاف ذلك مع التطبيق الخاص بك (تشفير البيانات تمتص أيضا ، لأن ثم لديك لقاعدة-64 ترميز البيانات المشفرة، الذي عرض النطاق الترددي مزيد من النفايات ومعالجتها مرة). يجب عليك <م> لا الثقة مدخلات من المستخدم.

وأود أن تثبط بقوة تخزين الدورة بأكملها في الكوكيز. لما له من آثار سيئة الأداء. النظر في هذا: وكل طلب (لكل الموارد) تحتوي على أحمال البيانات ربما لا معنى لها التي تحتاجها مرة واحدة أو مرتين فقط. في نهاية المطاف هذا الحمل سوف تصل للمستخدمين، عرض النطاق الترددي وأداء موقعك.

وهنا مثال:

GET / HTTP/1.1
Host: localhost
OtherUsefulHeaders: foo
Cookie: YourSessionState=...

والأولي حجم الطلب حوالي 200 بايت. دعنا نقول، يمكنك إضافة حوالي 100 بايت لجلسة العمل الخاصة بك. الآن حجم 300 بايت والنفقات العامة هو ~ 30٪. يمكنك إضافة 100 بايت أخرى، والنفقات العامة بنسبة 50٪. مما يعني أنه يتطلب ما يقرب من الوقت 2X لإرسال طلب و 2x عرض النطاق الترددي.

ويجب بدلا نظر في <لأ href = "https://blogs.msmvps.com/luisabreu/blog/2009/03/23/the-mvc-framework-maintaining-tempdata-on-cookies/" يختلط = "نوفولو noreferrer"> القائم على الكعكة TempData تنفيذ كما فعلت البصمة أصغر بكثير وفعلا من المنطقي.

أوصي تخزين TempData في كوكي (بدلا من كامل الدورة).

من أجل تخزين TempData في الكعكة ، تحتاج إلى تجاوز ITempDataProvider وتنفيذ المخصصة الخاصة بك موفر.

هناك في الواقع مجموعة nuget المتاحة (والتي لا هذا مخصص التنفيذ بالنسبة لك): BrockAllen.CookieTempData و هنا هو توثيق.الشيء الجيد حول هذه الحزمة هو أنه كل من ضغط وتشفير الخاص بك TempData, لذلك كنت لا داعي للقلق حول إرسال نص عادي عبر الإنترنت.

كل ما عليك القيام به هو تثبيت حزمة nuget ثم تجاوز CreateTempDataProvider في ControllerBase الدرجة:

using BrockAllen.CookieTempData;

namespace myProject.web.Controllers
{
    public class ControllerBase : Controller
    {
        // use CookieTempDataProvider instead of default provider
        protected override ITempDataProvider CreateTempDataProvider()
        {
            return new CookieTempDataProvider();
        }
    }
}

ويجب عدم استخدام جلسات لهذا، ولكن الملامح بدلا من ذلك. ملامح تستخدم الكوكيز لتتناسب مع أجهزة الكمبيوتر الشخصية، وما إلى ذلك يتم تخزين مفتاح الشخصية في الكعكة، ولا تضيع عند إغلاق المتصفح الخ.

ومعلومات هنا. http://odetocode.com/articles/440.aspx

وهذا يتوقف على نوع البيانات التي تريد تخزينها في ملف تعريف الارتباط، إذا كنت ترغب فقط في سلسلة مخزن، التعليمة البرمجية التالية سوف تفعل:

HttpCookie cookie = new HttpCookie("username","sth");
            cookie.HttpOnly = true;
            cookie.Expires = DateTime.Now.AddMonths(3);
            HttpContext.Current.Response.Cookies.Add(cookie);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top