ฉันรู้สึกว่ามันจะต้องถูกฝังไว้ที่ไหนสักแห่งในเอกสาร แต่ฉันหาไม่เจอ
คุณปิดหรือจบหรือฆ่าเซสชัน (อะไรก็ได้) ใน ExpressJS ได้อย่างไร
ฉันรู้สึกว่ามันจะต้องถูกฝังไว้ที่ไหนสักแห่งในเอกสาร แต่ฉันหาไม่เจอ
คุณปิดหรือจบหรือฆ่าเซสชัน (อะไรก็ได้) ใน ExpressJS ได้อย่างไร
คำตอบ:
การจัดการเซสชันไม่ได้รวมอยู่ใน Express อีกต่อไป คำตอบนี้อ้างถึงโมดูลเซสชันมาตรฐาน: https://github.com/expressjs/session
หากต้องการล้างข้อมูลเซสชันเพียงใช้:
req.session.destroy();
เอกสารนี้ไม่มีประโยชน์สำหรับเรื่องนี้ มันบอกว่า:
ทำลายเซสชันลบ req.session จะถูกสร้างขึ้นใหม่ในคำขอถัดไป
req.session.destroy(function(err) { // cannot access session here })
นี่ไม่ได้หมายความว่าเซสชันปัจจุบันจะถูกโหลดซ้ำในคำขอถัดไป หมายความว่าเซสชันที่ว่างเปล่าจะถูกสร้างขึ้นในที่เก็บเซสชันของคุณในการร้องขอครั้งต่อไป (น่าจะเป็น ID เซสชันไม่ได้เปลี่ยน แต่ฉันยังไม่ได้ทดสอบ)
ไม่เป็นไรมัน req.session.destroy();
req.session.destroy();
เป็น acidghost ทำ
คำถามไม่ได้ชี้แจงประเภทของร้านค้าเซสชันที่ใช้อยู่ คำตอบทั้งสองดูเหมือนจะถูกต้อง
สำหรับเซสชันที่ใช้คุกกี้:
จากhttp://expressjs.com/api.html#cookieSession
req.session = null // Deletes the cookie.
สำหรับ Redis เซสชันอื่น ๆ ตาม:
req.session.destroy // Deletes the session in the database.
จากhttp://expressjs.com/api.html#cookieSession
ในการล้างคุกกี้เพียงแค่กำหนดเซสชันเป็น null ก่อนตอบสนอง:
req.session = null
ใช้,
delete req.session.yoursessionname;
ทำลายเซสชันและจะยกเลิกการตั้งค่าคุณสมบัติ req.session เมื่อดำเนินการเสร็จสิ้นระบบจะเรียกกลับ
↓ วิธีที่ปลอดภัย ↓✅
req.session.destroy((err) => {
res.redirect('/') // will always fire after session is destroyed
})
↓ วิธีที่ไม่ปลอดภัย ↓❌
req.logout();
res.redirect('/') // can be called before logout is done
การใช้req.session = null;
จะไม่ลบอินสแตนซ์เซสชันจริงๆ วิธีแก้ปัญหาที่เหมาะสมที่สุดreq.session.destroy();
คือ แต่โดยพื้นฐานแล้วนี่คือกระดาษห่อหุ้มสำหรับdelete req.session;
แต่ตอนนี้เป็นหลักสำหรับห่อหุ้ม
https://github.com/expressjs/session/blob/master/session/session.js
Session.prototype.destroy = function(fn){
delete this.req.session;
this.req.sessionStore.destroy(this.id, fn);
return this;
};
req.session.destroy();
ข้างต้นไม่ได้ผลสำหรับฉันดังนั้นฉันจึงทำสิ่งนี้
req.session.cookie.expires = new Date().getTime();
ด้วยการตั้งค่าการหมดอายุของคุกกี้เป็นเวลาปัจจุบันเซสชันจะหมดอายุในตัวเอง
ตามที่กล่าวไว้ในหลาย ๆ ที่ฉันยังไม่สามารถรับฟังก์ชัน req.session.destroy () ให้ทำงานได้อย่างถูกต้อง
นี่คือวิธีแก้ปัญหาของฉัน .. ดูเหมือนจะทำเคล็ดลับและยังอนุญาตให้ใช้ req.flash ได้
req.session = {};
ถ้าคุณลบหรือตั้งค่าreq.session = null; ดูเหมือนว่าคุณจะไม่สามารถใช้ req.flash ได้