express 4.0 เซสชันด่วนพร้อมข้อความเตือนแปลก ๆ


105

ฉันพยายามทำงานผ่านการตั้งค่าแอป nodejs โดยใช้ express 4.x หลังจากสะดุดกับปัญหาการลบมิดเดิลแวร์ในที่สุดฉันก็ใช้งานได้

อย่างไรก็ตามมีข้อความเตือนสองสามข้อความในบรรทัดรหัสต่อไปนี้:

app.use(session({secret: '<mysecret>'})

คำเตือนเหล่านี้คือ:

Sun, 29 Jun 2014 12:45:10 GMT express-session deprecated pass resave option; default value will change at lib\config\express.js:55:11

Sun, 29 Jun 2014 12:45:10 GMT express-session deprecated pass saveUninitialized option; default value will change at lib\config\express.js:55:11

ในเอกสารประกอบค่าเริ่มต้นสำหรับ resave และ saveUninitialized เป็นจริง

ดังนั้นการเปลี่ยนรหัสเพื่ออ่าน

app.use(session({secret: '<mysecret>', 
                 saveUninitialized: true,
                 resave: true}));

กำจัดคำเตือน

ดังนั้นเพื่อไปที่ประเด็นของคำถาม:

เหตุใดฉันจึงต้องส่งค่าเหล่านี้หากเป็นค่าเริ่มต้นและเหตุใดฉันจึงไม่ต้องส่งผ่านในตัวเลือกอื่น ๆ


1
เนื่องจากค่าเริ่มต้นเหล่านี้จะเปลี่ยนไปและเมื่อเป็นเช่นนั้นคุณสามารถหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้นได้โดยการส่งผ่านไปยังมิดเดิลแวร์อย่างชัดเจน
soulcheck

12
ฉันชอบวิธีที่พวกเขาช่วยไม่ได้บอกคุณว่าตัวเลือกเริ่มต้นคืออะไร
Brade

4
ทั้งสองresaveและsaveUnitializedเป็นบูลีนซึ่งมีค่าเริ่มต้นเป็นtrue1.7.2: github.com/expressjs/session
cfs

1
@cfs: saveUninitializedมันควรจะเป็น ฉันคัดลอกสิ่งที่คุณโพสต์และทิ้ง 45 นาทีพยายามคิดว่าคำเตือนจะไม่หายไปไหน ต่อมาฉันรู้ว่ามีการสะกดผิด lol: D
AdityaParab

1
ขออภัยเกี่ยวกับเวลาที่เสียไป Maverick :) น่าเสียดายที่ความคิดเห็นเก่าเกินไปสำหรับฉันที่จะแก้ไขมิฉะนั้นฉันจะแก้ไขการพิมพ์ผิดของฉัน: /
cfs

คำตอบ:


68

ตามคำเตือนค่าเริ่มต้นจะเปลี่ยนไปดังนั้นพวกเขาจึงต้องการให้แน่ใจว่าการตั้งค่าอย่างชัดเจนในตอนนี้คุณจะไม่พบพฤติกรรมที่ไม่คาดคิดเมื่อค่าเริ่มต้นเปลี่ยนแปลงไป (ในอนาคตอันใกล้)


โอ้ดังนั้นค่าเริ่มต้นของพารามิเตอร์ทั้งสองนี้จะเปลี่ยนไปบ้าง? ที่เข้าท่ากว่า! ขอบคุณ.
jmls

3
ตำนานมันยังคงเปลี่ยนไปเร็ว ๆ นี้ :)
Qcom

2
จากอนาคตที่นี่. ยังคงมีการเปลี่ยนแปลงเร็ว ๆ นี้ :)
comphonia

53

ฉันพบว่าปัญหามีประโยชน์:

https://github.com/expressjs/session/issues/56

app.use(session({
    secret: cookie_secret,
    resave: true,
    saveUninitialized: true
}));

1
ขอบคุณสำหรับการตอบคำถามในรูปแบบของรหัส ... ไม่เห็นว่าเพียงพอที่นี่
Dave

ดี. นอกจากนี้ฉันขอแนะนำให้ดูเอกสาร ในกรณีของฉันควรตั้งค่าเป็นfalse( github.com/expressjs/session#resave , github.com/expressjs/session#saveuninitialized )
juanra

5

ฉันมีตัวแทนไม่เพียงพอที่จะเพิ่มสิ่งนี้เป็นความคิดเห็น ฉันเพิ่มค่านี้สำหรับค่าเริ่มต้นของคำตอบของเบ็น

secret: process.env.SESSION_SECRET || '<mysecret>',

2
app.use(session({
  cookieName: 'session',
  secret: 'eg[isfd-8yF9-7w2315df{}+Ijsli;;to8',
  duration: 30 * 60 * 1000,
  activeDuration: 5 * 60 * 1000,
  httpOnly: true,
  secure: true,
  ephemeral: true,
  resave: true,
  saveUninitialized: true
}));

ได้ผลสำหรับฉันเซสชันอาจต้องการเพียงการตั้งค่าเพิ่มเติมบางอย่าง ขอบคุณ
martinhajny
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.