2012-12-27 36 views
8

Vì tôi không xác định CPC tối đa khi gọi số expressServer.use(express.session({params})) hết hạn của cookie được đặt là "Phiên".Thay đổi hết hạn cookie trong Express

Tôi muốn thêm tính năng "nhớ tôi" khi đăng nhập. Nếu "nhớ thông tin đăng nhập của tôi" được chọn thì thời gian hết hạn sẽ được kéo dài đến một tháng.

Tôi làm cách nào để thực hiện việc này? Tôi đã thử chỉ đơn giản là mở rộng maxAge, nhưng điều đó dường như không làm bất cứ điều gì ...

expressServer.get '/blah', (request, response) => 
    request.session.cookie.maxAge = 2592000 
    response.end 'hello there' 

Cảm ơn sự giúp đỡ!

** EDIT **

tôi đã cố gắng thực hiện một máy chủ đơn giản để kiểm tra cập nhật cookie của người dùng. Tôi đang sử dụng tốc 3.0.4

Khi tôi ghé thăm 127.0.0.1:9000/blah, cookie trình duyệt "hết hạn" lĩnh vực vẫn còn "phiên" ...

express = require 'express' 

expressServer = express() 
expressServer.use express.cookieParser() 
expressServer.use express.session 
    secret: 'supersecret' 
    cookie: 
     path: '/' 
     httpOnly: true 

expressServer.get '/', (request, response) => 
    response.end 'hello' 

expressServer.get '/blah', (request, response) => 
    request.session.cookie.maxAge = 3600000 
    response.end 'hello again' 

expressServer.listen 9000 
console.log 'server running' 

Grrrrrrr ....

+0

Tuy nhiên, nếu tôi xóa cookie của trình duyệt của tôi và ghé thăm "/ blah", là "hết hạn" lĩnh vực được thiết lập một cách chính xác. Điều đó có ý nghĩa, vì cookie cần được đặt lần đầu tiên :) – user1161657

+1

Ok ... có vẻ như chỉ hoạt động nếu tôi cập nhật phiên ... Vì vậy, tôi vừa thêm 'request.session.blah = Date()' và những điều kỳ diệu làm việc? – user1161657

+0

Bạn có thể thử [đặt giá trị maxAge bằng giá trị mặc định] (http://www.senchalabs.org/connect/middleware-session.html) và sau đó hết hạn cookie nếu hộp kiểm không được chọn (req.session.cookie .expires = false). – Frank

Trả lời

11

tôi có một hộp kiểm nói là "nhớ đến tôi" trên trang/đăng nhập:

<p class="remember"> 
    <input type="checkbox" id="remember" name="remember" value="1" /> 
    <label for="remember">Remember me</label> 
</p> 

Sau đó, trong lộ trình POST của tôi để/login tôi làm một số sự tỉnh táo kiểm tra và thiết lập phiên nếu req.body.remember được thiết lập nếu không nó chỉ là một phiên cửa sổ:

//user is authenticated 
    //set session length 
    if (req.body.remember) { 
    var hour = 3600000; 
    req.session.cookie.maxAge = 14 * 24 * hour; //2 weeks 
    } else { 
    req.session.cookie.expires = false; 
    } 

    req.session.userid = user._id; 

Thêm vài dòng sau đây (tôi sử dụng redis) trong app.js:

app.use(express.cookieParser('secret-word')); 
    app.use(express.session({ 
    store: new RedisStore({ 
     host: cfg.redis.host, 
     db: cfg.redis.db 
    }), 
    secret: 'another-secret' 
    })); 
+0

Và điều này sẽ cập nhật cookie trong trình duyệt của khách hàng? – user1161657

+0

Đối với tôi, nó thay đổi cookie của phiên trên chương trình phụ trợ, nhưng không thực sự thay đổi bất kỳ thứ gì trong trình duyệt: '( – user1161657

+0

Tôi đã cập nhật câu trả lời. Tôi đang sử dụng redis, đây là tất cả những gì tôi phải làm để làm việc đó – chovy

2

Tôi tìm thấy một answer điều đó dường như làm việc cho tôi; thêm nó vào đầu tuyến đường của bạn.

app.all '*', (req,res,next) -> 
    if req.method is 'HEAD' or req.method is 'OPTIONS' 
    next() 
    else 
    req.session._garbage = Date(); 
    req.session.touch(); 
    next(); 
3

Đặt tên cookie thành giá trị, trong đó có thể là một chuỗi hoặc đối tượng được chuyển đổi thành JSON. Tùy chọn đường dẫn mặc định là "/".

res.cookie('rememberme', '1', 
       { expires: new Date(Date.now() + 900000), httpOnly: true }); 

Đối với tài liệu tham khảo thêm theo liên kết có thể được sử dụng

http://expressjs.com/api.html#res.cookie

5

Nếu bạn muốn thực hiện lăn phiên với cookie-sessions ở tốc 4, cấu hình trung gian như thế này:

app.use(cookieSession({ 
    secret: your_secret, 
    maxAge: your_maxAge, 
    key: 'sessionId' 
})); 

Lưu ý rằng bạn không cần phải đặt tùy chọn expires.

Để mở rộng phiên của bạn, chỉ cần thay đổi nó như thế này:

app.get('*', function (req, res, next) { 
    req.session.foobar = Date.now(); 
    next(); 
} 

Lưu ý rằng trong nhanh 4 không có req.session.touch().

0

Hoặc Bạn có thể thử này, nó làm việc cho tôi:

if (req.body.remember) 
{ 
    var oneWeek = 7 * 24 * 3600 * 1000; //1 weeks      
    req.session.cookie.expires = new Date(Date.now() + oneWeek); 
    req.session.cookie.maxAge = oneWeek; 
} 
Các vấn đề liên quan