الوصول إلى "مفتاح جلسة عمل" اسم الكعكة من أي مكان في القضبان
-
05-07-2019 - |
سؤال
ونحن نبني المساعد لالقضبان لاستخدامها في تطبيقات الإطار من الفيسبوك، وعند نقطة واحدة ونحن بحاجة لمعرفة ما اذا كان معرف جلسة كوكي السكك الحديدية كما تم تعيين أو لا.
وبشكل افتراضي، يتم تسمية هذه الكعكة <م> _myprojectname_session م>، ما نحن بحاجة لمعرفة هو الاسم الفعلي للالكعكة نفسها. حتى إذا لم يكن وضع، يمكننا أن نفعل بعض الموجهات للتأكد من تعيين ملفات تعريف الارتباط.
وكيف يمكننا الوصول إلى اسم لعنة من ملفات تعريف الارتباط من أي مكان؟ أو على الأقل من داخل وحدة تحكم؟
المحلول 2
ولقد وجدت الحل. في القضبان 2.3.2 على الأقل مفتاح جلسة في مجموعة في config/initializers/session_store.rb
مثل هذا:
ActionController::Base.session = {
:key => '_myapp_session',
:secret => '[...]'
}
ويمكنك قراءة قيمة مثل هذا:
ActionController::Base.session_options[:key]
ومن Base.session
إلى Base.session_options
التلقائى، لا معنى كبير، وأنها تسبب لي صداعا كبيرا ... لول
نصائح أخرى
Rails.application.config.session_options[:key]
وللوصول إلى اسم ملف تعريف ارتباط جلسة من داخل طريقة العرض أو وحدة تحكم، يمكنك أن تقول:
request.session_options[:session_key]
وبعد ذلك للوصول إلى القيمة الأولية لتلك الكعكة، ويجري مجموعة فارغة إذا لم يتم تعيين، يمكنك استخدام:
request.cookies[ request.session_options[:session_key] ]
ويتم تعيين اسم الكعكة (ويعرف أيضا باسم session_key) في ملف config/environment.rb
الخاص بك.
config.action_controller.session = {
:session_key => '_project_session',
:secret => 'long-secret-key'
}
في تجربتي، إذا كان هناك تسطير في المفتاح، IE أحيانا لا تعيين ملفات تعريف الارتباط. وبعبارة أخرى، استخدم "projectsession 'بدلا من' _project_session".
وأعتقد أنه يتم تخزين مفتاح جلسة في متغير يسمى ENV_SESSION_KEY
ملحوظة أيضا هذا الخطأ الذي يؤثر اختبارات حول session_options في بعض الإصدارات من القضبان الإصدار 2.x: <لأ href = "https://rails.lighthouseapp.com/projects/8994/tickets/2303-testrequest-doesnt-initialize- session_options "يختلط =" نوفولو noreferrer "> https://rails.lighthouseapp.com/projects/8994/tickets/2303-testrequest-doesnt-initialize-session_options
في القضبان 3/4 أنا باستخدام هذا:
request.env["rack.request.cookie_hash"]
وهذا هو تجزئة التي تحتوي على كافة ملفات تعريف الارتباط للمستخدم الحالي بما في ذلك واحد للجلسة. تجزئة لها كمفتاح اسم الكعكة، وكقيمة قيمة الكعكة
وأنا لا أستطيع أن العمل على كيفية القيام بذلك في القضبان 3: - (
وأخيرا انتهى بي الأمر وضع هذا في التكوين / المهيآت / session_store.rb
SESSION_KEY = '_myapp_session'
MyApp::Application.config.session_store :cookie_store, :key => SESSION_KEY
ومن ثم الوصول إلى هذا عند الحاجة، على سبيل المثال في طريقة عرض ...
<%= ::ENV_SESSION_KEY %>