簡體   English   中英

我不知道我在設置Cookie時做錯了什么?

[英]I don't know what I am doing wrong setting the cookie?

所以我正在使用nodejs和mongodb並嘗試在其中一個頁面上設置cookie。

在app.js文件中,使用此文件非常標准

var express = require('express')
  , app = express()
  , dbUserModel = require('./models/user')
  , db = require('./db')
  , pass = require('./config/passport')
  , passport = require('passport')
  , routes = require('./routes/index')
  , user = require('./routes/user')
  , path = require('path')
  , http = require('http')
  , connect = require('connect')
  , mongoose = require('mongoose')
  , mongoConnect = mongoose.connect('mongodb://localhost/test5');

// all environments

app.configure(function(){
    app.set('port', process.env.PORT || 3000);
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');


    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
  app.use(express.cookieParser('secret'));
  ///app.use(express.cookieSession());
  app.use(express.methodOverride());
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));    
});
  app.get('/', routes.index)
  app.get('/register', user.register);
  app.post('/register', user.registerPost);
  app.get('/registerError', user.registerError);
  app.get('/registerThanks', user.registerThanks);
  app.get('/login', user.login);
  app.post('/login', user.loginPost);
  app.get('/loginError', user.loginError);
  app.get('/userProfile', user.userProfile);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
  console.log('Users: ' + db.collections.users);
});

然后,我正在調用路由文件。

這是我的代碼:

exports.login = function(req, res) {
    res.render('login', {user: req.user, title: 'Weblio'});
};

exports.loginPost = function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err) }
        if (!user) { return res.redirect('loginError'); }
        req.logIn(user, function(err) {
            if (err) { return next(err); }
            return res.redirect('userProfile');
        });
  })(req, res, next);
};

exports.loginError = function (req, res) {
    res.render('loginError', {title: 'Weblio'});
};

exports.userProfile = function(req, res) {      
    res.render('userProfile', {user: req.user, title: 'Weblio'});
    res.cookie('name', 'test', { maxAge: 900000, httpOnly: true }); 

};

當我進入userProfile頁面並在控制台中鍵入document.cookie時,結果顯示為空字符串。

我還嘗試將res.cookie移至登錄后,但無法正常工作...

請幫忙!

將響應標頭發送給客戶端后,無論使用哪種編程語言,都無法修改Cookie。 調用res.render()它將發送標頭以及實際視圖。

HTTP cookie是發送到客戶端的標頭的一部分。

嘗試調用res.cookie()的前res.render()發送到客戶端的響應。

另外,在調用app.use(express.cookieParser('secret')); 您通過提供“秘密”參數來創建“簽名” cookie。
因此,在更改cookie時,必須告訴express您正在處理這樣的簽名cookie:
res.cookie('name', 'test', {maxAge: 900000, httpOnly: true, signed: true});

您可以在此處閱讀有關Cookie的更多信息: http : //www.nczonline.net/blog/2009/05/05/http-cookies-explained/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM