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

لا يقوم express session بالحفظ

Samer Alashqar

السؤال

لا يتم حفظ اي شيء اقوم بوضعه في حفظ الجلسة

app.use(session({
  secret: process.env.SECRET_KEY,
  resave: false,
  saveUninitialized: true,
})) 

req.session.token = token;
req.session.save((err) => {
        console.log(err);
      })

//returns undefined

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

في حال كنت تقوم بتجربة المشروع محليًا من دون استخدام HTTPS، حاول إضافة secure بالقيمة false للخاصية cookie ما يسمح بتعيين الكوكي حتى ولو كان الاتصال عن طريق HTTP كالتالي

app.use(session({
  ...
  cookie: { secure: false }
})) 

حاول أيضًا بعد تعيين القيم داخل الجلسة استدعاء أمر الحفظ يدويًا كالتالي

req.session.save()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 13 دقائق مضت قال Hassan Hedr:

في حال كنت تقوم بتجربة المشروع محليًا من دون استخدام HTTPS، حاول إضافة secure بالقيمة false للخاصية cookie ما يسمح بتعيين الكوكي حتى ولو كان الاتصال عن طريق HTTP كالتالي


app.use(session({
  ...
  cookie: { secure: false }
})) 

حاول أيضًا بعد تعيين القيم داخل الجلسة استدعاء أمر الحفظ يدويًا كالتالي


req.session.save()

 

للاسف لم تحل المشكلة ..

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 5 دقائق مضت قال Samer Alashqar:

للاسف لم تحل المشكلة ..

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

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Hassan Hedr:

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

ان فهمتك ..

فأنت تقصد كيف اتحقق ان تم تخزين البيانات ضمن الجلسة ..

كل ما اقوم به هو 

console.log()

عدا ذلك انا لا اعرف كيف اتحقق (ان كانت هناك طريقة اخرى) .

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 دقيقة مضت قال Samer Alashqar:

ان فهمتك ..

فأنت تقصد كيف اتحقق ان تم تخزين البيانات ضمن الجلسة ..

كل ما اقوم به هو 


console.log()

عدا ذلك انا لا اعرف كيف اتحقق (ان كانت هناك طريقة اخرى) .

هل يمكنك إرفاق شيفرة التخزين ضمن الجلسة والشيفرة التي تقوم بها بالاختبار عبر طباعة القيم ضمن الجلسة

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 ساعة قال Hassan Hedr:

هل يمكنك إرفاق شيفرة التخزين ضمن الجلسة والشيفرة التي تقوم بها بالاختبار عبر طباعة القيم ضمن الجلسة

//تخزين الجلسة
app.use(session({
  secret: process.env.SECRET_KEY,
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false },
})) 


//التحقق من وجود البيانات ضمن الجلسة 
app.get('/' , (req,res) => {
  console.log(req.session.token)  // ملاحضة: هذا السطر لا اقوم باضافته الا بعد عملية تخزين البيانات ضمن الجلسة 
  res.sendFile(path.join(__dirname , './views/index.html'))
})

//تخزين البيانات ضمن الجلسة
exports.viaCode = (req,res) => {
    try {
  

      //انشاء كائن يحوي رقم عشوائي
      var payload ={
        number:randomNum (),
      }
       //انشاء توكين  
      const token = jwt.sign(payload, process.env.VERIFY_TOKEN , {expiresIn: '10m'}); 
  
      var user = new User ({
        isVerified: false,
      })
 
      //تخزين البيانات ضمن الجلسة
      const newUser = user.save();
      req.session.token = token;
      req.session.save((err) => {
        console.log(err);
      })
 } catch (error) {
      console.log(error)
      res.status(500).send()
    }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 ساعة قال Samer Alashqar:

//تخزين الجلسة
app.use(session({
  secret: process.env.SECRET_KEY,
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false },
})) 


//التحقق من وجود البيانات ضمن الجلسة 
app.get('/' , (req,res) => {
  console.log(req.session.token)  // ملاحضة: هذا السطر لا اقوم باضافته الا بعد عملية تخزين البيانات ضمن الجلسة 
  res.sendFile(path.join(__dirname , './views/index.html'))
})

//تخزين البيانات ضمن الجلسة
exports.viaCode = (req,res) => {
    try {
  

      //انشاء كائن يحوي رقم عشوائي
      var payload ={
        number:randomNum (),
      }
       //انشاء توكين  
      const token = jwt.sign(payload, process.env.VERIFY_TOKEN , {expiresIn: '10m'}); 
  
      var user = new User ({
        isVerified: false,
      })
 
      //تخزين البيانات ضمن الجلسة
      const newUser = user.save();
      req.session.token = token;
      req.session.save((err) => {
        console.log(err);
      })
 } catch (error) {
      console.log(error)
      res.status(500).send()
    }
}

 

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

req.session.save((err) => {
  console.log(err);
  if(err) res.status(500).send(err.message);
  else res.send({ token })
})

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 20 دقائق مضت قال Hassan Hedr:

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


req.session.save((err) => {
  console.log(err);
  if(err) res.status(500).send(err.message);
  else res.send({ token })
})

 

قمت بالتجربة لكن رسالة ال err لا تظهر الا اذا قمت بالذهاب لنفس route علما انني استخدم ajax ..

قمت بانشاء ajax جديد و route جديد للاختبار لكن كل ما يتم ارجاعه من هذه الشيفرة هو undefined 

req.session.save((err) => {
      console.log(err);
      if(err) res.status(500).send(err.message);
      else res.send('success !')
    })

هذا الروت الجديد : 

// عملية ارسال ajax 
$.ajax("http://localhost:8080/session/viaCode",{
            type: 'GET',
            xhrFields: { withCredentials: true },
            crossDomain: true,
            success: (res) => {
                console.log('success !')
            },
            error: (err) => {
                console.log(err)
            } 
        })

//الروت
app.get('/session/viaCode' ,userController.sessionViaCode);

//controller
 exports.sessionViaCode = (req,res) => {
    req.session.num = 5;
    req.session.save((err) => {
      console.log(err);
      if(err) res.status(500).send(err.message);
      else res.send('success !')
    })
  }

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 21 دقائق مضت قال Samer Alashqar:

لكن رسالة ال err لا تظهر الا اذا قمت بالذهاب لنفس route

هل يمكنك إرفاق رسالة الخطأ التي تظهر ضمن الرد في الطلب أو ضمن الطرفية التي تعمل بها إجرائية الخادم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Hassan Hedr:

هل يمكنك إرفاق رسالة الخطأ التي تظهر ضمن الرد في الطلب أو ضمن الطرفية التي تعمل بها إجرائية الخادم

ما قصدته في رسالة الخطأ هو undefined تحديدا ..

اما رسالة خطأ ك Error: 500 في ال console. فا لا يتم ارسال رسالة خطأ ابدا فقط يظهر  undefined دون رسالة خطأ 

62134341c4767_2022-02-21(1).thumb.png.31f41422acb8407712d1271711c995b4.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Samer Alashqar:

ما قصدته في رسالة الخطأ هو undefined تحديدا ..

اما رسالة خطأ ك Error: 500 في ال console. فا لا يتم ارسال رسالة خطأ ابدا فقط يظهر  undefined دون رسالة خطأ 

إذا عملية الحفظ تتم بشكل سليم بما أنك تستخدم nodemon فعند كل عملية حفظ للملفات سيقوم الخادم بإعادة التشغيل وبالتالي خسارة كل بيانات الجلسة بما أن المخزن الافتراضي هو مخزن الذاكرة، حاول طلب المسار session/viaCode ثم طلب مسار الاختبار بعده مباشرة من دون أن تقوم بأي تعديلات على الملفات تؤدي لإعادة التشغيل بين العمليتين

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...