2017-11-28 8 views
0

express.jsとReactを使用します。成功ログイン後、私はuser_idをセッションに保存しますが、2-3分後にセッションが失われ、ページを更新するとログアウトします。ここで は、フォーム送信後、私は機能/tryloginとeveything細かい作業を行う私のserver.jsExpress.jsセッションが約3分後に失われる

var mysql = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'host', 
    user  : 'user', 
    password : 'password', 
    database : 'database', 
    pool  : { maxConnections: 50, maxIdleTime: 30}, 
}); 

connection.connect(function(error){ 
    if(!!error){ 
     console.log('error'); 
    }else{ 
     console.log('Connected'); 
    } 
}) 
//pluginy 
var bodyParser = require('body-parser'); 
var express = require('express'); 
var session = require('express-session'); 
var app = express(); 
//ustwienia 
app.use(bodyParser()); //przesylanie danych w req.body 
app.set('trust proxy', 1) // trust first proxy 
app.use(session({ 
    secret: 'v8bRRj7XVC6Dvp', 
    saveUninitialized: true, 
    resave: true, 
    cookie: {secure: true} 
})); 
app.use('/static', express.static(__dirname + '/src')); 
app.use('/dist', express.static(__dirname + '/dist')); 
app.use('/php', express.static(__dirname + '/php')); 
app.set('views', __dirname + '/views'); 
app.set('view engine','pug'); 

function checkAuth(req, res, next) { 
    console.log('User id: '+req.session.user_id); 

    if (!req.session.user_id) { 
     if(req.route.path=='/'){ 
      res.render("indexNotLogin",{title:''}); 
     }else{ 
     res.send('You are not authorized to view this page'); 
    } 
    } else { 
    next(); 
    } 
} 

//roots 
    //index 
    app.get('/', checkAuth, function(req, res){ 
     res.render("index",{title:''}); 
    }) 
    //funkcje 
    app.get('/funkcje', function(req, res){ 
     res.render("funkcje",{title:''}); 
    }) 

//trylogin 
    app.post('/trylogin', function(req, res){ 
     var username = req.body.name; 
     var password = req.body.password; 
     connection.query("SELECT * FROM user WHERE username='"+username+"' AND pass='"+password+"' LIMIT 1", function(error, rows,fields){ 
      //callback 
      if(!!error){ 
       console.log('error in query'); 
      }else{ 
       if(rows.length){ 
        console.log(rows[0].id) 
        req.session.user_id = rows[0].id; 
        res.redirect('/'); 
       }else{ 
        res.send('user dont exist') 
       } 
      } 
     }) 

    }) 
app.listen(3000,'0.0.0.0', function(){ 
    console.log('Port: 3000') 
}) 

あるreq.session.user_id = rows[0].idはuser_idのですが、なぜセッションはとても速く失われますか?

答えて

1

あなたはセッションミドルウェアでmaxAgeオプションを使用して、セッション時間を増やすことができます。

app.use(session({ 
    secret: 'v8bRRj7XVC6Dvp', 
    saveUninitialized: true, 
    resave: true, 
    cookie: {maxAge:900000} //here ,15 min session time 
})); 
+0

私はクッキーを使用する場合: '{確保:真を、MAXAGE:900000}が{' '私のセッションはいけない仕事が、私は設定している場合secure:false、maxAge:900000} 'これは問題ありません。私はこれをどのように修正できるか知っていますか? –

+0

_secure_は基本的にはhttps接続ではなく、httpではない。もしあなたが その必要がないと思うなら、私はあなたが使うべきではないと思う。 – wrangler

+0

私のセッションはまだ同じ問題を働かせていませんねえ...私はスクリプトの最後に '{secure:false、maxAge:900000}'を使っていました。 'app.listen(3000、function(){})'ポストで。なぜこれがまだ2〜3分間だけ機能するのか知っていますか? –

関連する問題