كيف يمكنك مسح إدخال واحد من جلسة روبي أون ريلز؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

في روبي على القضبان عند القيام به session[:foo] = nil فإنه يترك إدخال اسمه :foo في كائن الجلسة.كيف يمكنك التخلص من هذا الإدخال الفردي من كائن الجلسة؟

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

المحلول

في الواقع هناك طريقة لحذف قيمة من الجلسة.كما قال RichH، فإن متغير الجلسة هو مثيل CGI::Session.عند إدخال شيء من هذا القبيل session[:foo] إنه في الواقع يبحث عن هذا الرمز في ملف @data متغير المثيل في كائن الجلسة.متغير البيانات هذا هو التجزئة.

يحرر: يوجد متغير مثيل بيانات في فئة CGI::Session.إذا ذهبت إلى مستندات وإلقاء نظرة على الكود المصدري لـ []= الطريقة سترى أن هناك @data عضو.

حتى يتم الحذف session[:foo] كل ما عليك فعله هو الوصول إلى ذلك @data متغير من داخل الجلسة

   session.data[:foo]

الآن لحذفه:

   session.data.delete :foo

بمجرد القيام بذلك، لن يكون هناك المزيد من foo في متغير الجلسة.

نصائح أخرى

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

AbstractStore::SessionHash يرث من Hash, ، لذلك هذا يؤجل إلى Hash#delete طريقة:

session.delete(:key_to_delete)
scroll top