اذهب إلى المحتوى

السؤال

نشر (معدل)

اقوم بعمل تسجيل الدخول و اريد ان اخزن cookie لدي مشكلة و هو cookie لا يتم تخزينه لا اعلم لماذا و لا يقوم بارجاع خطأ لكي اعلم ما سبب عدم تخزين cookie حتى .. 

للتو قمت بالبحث و وجدت ان المشكلة ربما انني لا اقوم بتخزين ال cookie من طرف العميل هل هناك طريقة لفعل ذلك؟ وهل فكرة تخزين ال cookie من طرف العميل طريقة امنة؟. 

شكرا

2022-02-08.thumb.png.ab276036f283f097a61b3f7ce981edda.png

6202162668b5d_2022-02-08(1).thumb.png.4f5854bf1357ffc9897b2d7f79cab396.png

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 0
نشر

هل قمت بإستيراد مكتبة cookie-parser تحتاج إلى الطبقة الوسيطة cookieParser قبل التعامل مع ال cookies لتثبيتها:

npm i cookie-parser

ثم تقوم بإستيراد المكتبة:

const cookieParser = require('cookie-parser');

بعد ذلك تستخدم الطبقة الوسيطة ضمن التطبيق:

app.use(cookieParser());

ثم تستطيع إضافة cookie:

res.cookie('cookieName', 'cookieValue');
  • 1
نشر

أنت تريد معرفة إن كان المستخدم قد سجل دخول أم لا عن طريق الاحتفاظ بقيمة token التي هي باسم testing (من الأفضل أن تكون بنفس الاسم token) *عدلها في المخدم*.

قيمة cookie ستأتي مع الرد الخاص بالمخدم، بهذه الحالة عليك تخزينها ضمن متغير عام (مثل المتغير User)

في أول الملف نقوم بإنشاء متغير 

let toker = ""; // قيمة فارغة

بعد تأكدك من تسجيل الدخول، سوف يتم إعادة res معها cookie ولكن المتصفح يقوم بحفظها تلقائياً فيمكنك جلبها من خلال الكائن document ثم خاصية cookie.

نحتاج تابع يقرأ السلسلة النصية من كوكيز الوثيقة ثم حفظها في المتغير فيكون شكل الدالة كالتالي:

  • هذه دالة عامة ضعها في أول الملف 
  • تقوم الدالة باستقال مفتاح الكوكيز، ثم تقسم نص خاصية كوكيز لسلاسل نصية عن طريق الفاصلة المنقوطة، ثم تفصل بين المفتاح و القيمة حسب موقع إشارة = بينهما، و عند إيجاد المفتاح المطلوب تعيد قيمته
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
    }
    return "";
} 

ثم عند نجاح الطلب في AJAX نقوم باستدعاء الدالة لقراءة قيمة token 

success: function(res) {
  token = getCookie("token");
  alert(token);
  // ...
},

 

  • 0
نشر
بتاريخ 19 ساعات قال Wael Aljamal:

أنت تريد معرفة إن كان المستخدم قد سجل دخول أم لا عن طريق الاحتفاظ بقيمة token التي هي باسم testing (من الأفضل أن تكون بنفس الاسم token) *عدلها في المخدم*.

قيمة cookie ستأتي مع الرد الخاص بالمخدم، بهذه الحالة عليك تخزينها ضمن متغير عام (مثل المتغير User)


في أول الملف نقوم بإنشاء متغير 

let toker = ""; // قيمة فارغة

بعد تأكدك من تسجيل الدخول، سوف يتم إعادة res معها cookie ولكن المتصفح يقوم بحفظها تلقائياً فيمكنك جلبها من خلال الكائن document ثم خاصية cookie.

نحتاج تابع يقرأ السلسلة النصية من كوكيز الوثيقة ثم حفظها في المتغير فيكون شكل الدالة كالتالي:

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

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
    }
    return "";
} 

ثم عند نجاح الطلب في AJAX نقوم باستدعاء الدالة لقراءة قيمة token 


success: function(res) {
  token = getCookie("token");
  alert(token);
  // ...
},

 

اعتذر لعدم توضيحي للسؤال ..

عند ارسالي لطلبية post لكي انشاء المستخدم اريد في نهاية العملية ان ارسل بالرد cookie لكي يتخزن في المتصفح لكن لايتم ارسال ال cookie من الاساس ..

هل المشكلة هو انني اقوم بالعملية باستخدام post ؟ لانني قمت بتجربة get ونجح الامر ، لكن اذا كان ينبغي ان انشاء cookie عن طريق get هذا يعني انني سأقوم بعملية ajax اخرى.

  • 0
نشر
بتاريخ 10 ساعات قال Samer Alashqar:

اعتذر لعدم توضيحي للسؤال ..

عند ارسالي لطلبية post لكي انشاء المستخدم اريد في نهاية العملية ان ارسل بالرد cookie لكي يتخزن في المتصفح لكن لايتم ارسال ال cookie من الاساس ..

هل المشكلة هو انني اقوم بالعملية باستخدام post ؟ لانني قمت بتجربة get ونجح الامر ، لكن اذا كان ينبغي ان انشاء cookie عن طريق get هذا يعني انني سأقوم بعملية ajax اخرى.

على الأغلب الكوكيز لديك بنمط HTTP-only لذلك هي ليست ظاهرة، بعد عمل POST ستم جلب cookies و يمكنك استخدامها في الطلبيات اللاحقة بتمرير الخاصة و القيمة التالية:

xhrFields: { withCredentials: true },

بالشكل:

$.ajax("https://example.com/v2/...", {
     method: 'GET',
     xhrFields: { withCredentials: true },
     crossDomain: true,
     success: suc_fun,
     error: error_fun
  });

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...