كيف يتم HttpContext يجري الحفاظ على طلب استجابة

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

  •  07-07-2019
  •  | 
  •  

سؤال

وأنا أتساءل كيف يتم الحفاظ نظرا لHttpContext أن طبيعة الاستجابة للطلب على شبكة الإنترنت هي بلا جنسية في الأساس.

هل معرف يجري لكائن HttpContext إرسالها كجزء من __EVENTTarget / __EVENTARGUMENTS حقول مخفية بحيث أن الطبقة HttpRuntime يمكن أن تخلق الطبقة HttpContext من خلال قراءة هذا القسم من الطلب (HttpWorkerRequest)؟ لا أعتقد

واسمحوا لي أن أعرف وأنا في محاولة لملء بعض الثقوب في فهمي للخط أنابيب HTTP وكنت غير قادر على العثور على أي معلومات حول هذا الموضوع.

وأنا أفهم شيء من هذا القبيل HttpContext.Current.Session [ "myKey"] = القيمة؛

ويعمل تماما ولكن إذا كان علي أن أفعل شيئا من هذا القبيل في لغة مختلفة (ويقول بيرل)، وأود أن استخدام الحقول المخفية لنفسه، لن أنا؟

والشكر -Venu

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

المحلول

ويتم إعادة إنشاء HttpContext لكل طلب. وHttpSession، ومع ذلك، يتم تخزينها على خادم عبر طلبات. في الأساس، HttpSession هو قاموس <سلسلة، قاموس <سلسلة، وجوه >>. يتم توفير المفتاح الأولي، ومعرف الدورة، إما عن طريق ملف تعريف الارتباط أو معلمة سلسلة الاستعلام (في حال استخدام جلسات أقل ملف تعريف الارتباط). إذا كنت تستخدم عازف الكمان، سترى الكعكة ASP.NET_SessionId الذي يحتوي على مفتاح للجلسة الخاصة بهذا المستخدم.

في كود:

class HttpSessionState {
   private static readonly Sessions = 
     new Dictionary<string, Dictionary<string, object>>();

   public object this(string key) {
      get {
         return GetCurrentUserSession()[key]
      }
      set {
         GetCurrentUserSession()[key] = value;
      }
   }

   private Dictionary<string, object> GetCurrentUserSession() {
      var id = GetCurrentUserSessionId[]
      var d = Sessions[id];
      if (d == null) {
         d = new Dictionary<string, object>();
         Sessions[id] = d;
      }
      return d;
   }

   private string GetCurrentUserSessionId() {
      return HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value;
   }
}

ويعالج تنفيذ الحقيقي أيضا مهلة الدورة، تخلت، وجلسات مع ملفات تعريف الارتباط - ولكن الفكرة الأساسية هي نفسها

.

نصائح أخرى

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top