it-swarm.asia

لا يمكن الوصول إلى ملفات تعريف الارتباط من document.cookie في JS ، لكن المتصفح يعرض ملفات تعريف الارتباط موجودة

لا يمكنني الوصول إلى أي ملف تعريف ارتباط من JavaScript. أحتاج إلى قراءة بعض القيمة وإرسالها عبر JSON لإجراء عمليات الفحص المخصصة الخاصة بي.

لقد حاولت الوصول إلى ملفات تعريف الارتباط من JS ، كما هو موضح في:

كما ترون في الكود ، يُرى بوضوح كالكريستال التالي:

var c_value = document.cookie;

عندما أحاول الوصول إلى قيمة document.cookie من مصحح أخطاء الويب في Chrome ، أرى فقط السلسلة الفارغة على تعبيرات المشاهدة :

لذلك لا يمكنني قراءة قيمة ملفات تعريف الارتباط ، والتي أحتاجها.

لقد راجعت اسم ملف تعريف الارتباط ، الذي أرسله للحصول على قيمة مقترنة IS صحيحة. أيضًا ، أنا أستخدم W3Schools الكود المصدري للحصول على ملفات تعريف الارتباط ، إذا كنت مهتمًا (ولكن من الرابط الثاني ، تكون التقنية مماثلة).

كيف يمكنني حل مشكلتي؟

شكر!

64
user2402179

من المرجح أنك تتعامل مع httponly ملفات تعريف الارتباط. httponly هي علامة يمكنك تعيينها على ملفات تعريف الارتباط مما يعني أنه لا يمكن الوصول إليها عن طريق JavaScript. هذا لمنع البرامج النصية الضارة من سرقة ملفات تعريف الارتباط بالبيانات الحساسة أو حتى الجلسات بأكملها.

لذا عليك إما تعطيل علامة httponly أو تحتاج إلى العثور على طريقة أخرى للحصول على البيانات إلى javascript الخاص بك.

من خلال النظر في الشفرة الخاصة بك ، سيكون من السهل تعطيل إشارة http فقط:

Response.AddHeader("Set-Cookie", "CookieName=CookieValue; path=/;");
Response.SetCookie(new HttpCookie("session-id") { Value = Guid.NewGuid().ToString(), HttpOnly = false });
Response.SetCookie(new HttpCookie("user-name") { Value = data.Login, HttpOnly = false });

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

<div id="example" data-info="whatever data you are trying to retrieve"></div>
console.log(document.getElementById('example').getAttribute('data-info'));
109
PeeHaa

راقب أيضًا سمة مسار ملف تعريف الارتباط ، حيث أن ملف تعريف الارتباط مرئي فقط للدلائل الفرعية ضمن المسار. واجهت مشكلتي وحلت تحديد مسار "/"

2
ejaenv

أود أن أقول أن http فقط هو الجاني الأول لك ، ولكن يمكن أن يحدث هذا أيضًا من خلال عدم تحديد نطاق ملف تعريف الارتباط.

إذا تمت إعادة توجيه الموقع من مجال آخر ، فستحتاج إلى النظر في تحديد نطاق ملف تعريف الارتباط. يحدد المجال والمسار نطاق ملف تعريف الارتباط ، والذي يجب إرسال عناوين URL إلى ملف تعريف الارتباط. بناءً على ذلك ، قد لا ترى ملف تعريف الارتباط في إجابتك.

واجهت هذه المشكلة عند إعداد ملف تعريف ارتباط على تسجيل دخول ناجح لـ SAML SSO ولم أستطع استرداد ملف تعريف الارتباط من المستند لأنه لم يتم إرساله أبدًا كجزء من الطلب.

2
Tenzin Palber

إذا تم تعيين ملف تعريف الارتباط الخاص بك على أنه Set-Cookie أو Set-Cookie2 فهو ليس جزءًا من مجموعة رؤوس الاستجابة: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders٪28٪29-method

إرجاع كل الرؤوس من الاستجابة ، باستثناء تلك التي يكون اسم الحقل هو Set-Cookie أو Set-Cookie2.

0
Dunken

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

Response.AddHeader ("Set-Cookie"، "CookieName = CookieValue؛ path = /؛")؛ Response.SetCookie (جديد HttpCookie ("session-id") {Value = Guid.NewGuid (). ToString ()، HttpOnly = false})؛ Response.SetCookie (جديد HttpCookie ("اسم المستخدم") {Value = data.Login، HttpOnly = false})؛

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

من الممكن أن تفعل تغييرات في جانب الخادم.

0
Manas