2016-07-25 62 views
0

我正在使用nodejs,并且我正尝试访问会话变量,该会话变量与定义和设置会话变量的路由不同。它一直告诉我会话变量没有被定义!会话变量未定义在nodejs中设置为值的范围内

这是我设置会话变量:

var http  = require('http'); 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var mysql  = require('mysql'); 
var urlencodedParser = bodyParser.urlencoded({ extended: false }) 
var app = express(); 
var dateFormat = require('dateformat'); 
var nodemailer = require('nodemailer'); 
var cookieParser = require('cookie-parser') 
var session = require('express-session'); 


app.use(cookieParser()); 

app.use(session({ 
    secret: "This_is_a_secret", 
    resave: false, 
})); 


    app.post('/auth',urlencodedParser,function (req, res) { 

     conn.query('SELECT * FROM users WHERE user_name="'+req.body.username+'" AND user_pass="'+req.body.password+'"',function(err,res1){ 
      if(err) { 
       console.log("Error!"); 
       res.send('-2'); 
      } 
      else{ 
       if(res1.length==0) { 
        console.log("No matching!"); 
        res.send('-2'); 
       } 
       else if(res1.length==1){ 
        req.session.username = req.body.username; //This is my session variable 
        console.log("Successful login with: " + req.session.username); //This works fine 
        res.send('1'); 
       } 
      } 
     }); 
    }); 

这是我试图访问req.session.username第二条路线:

app.post('/privilage',urlencodedParser,function (req, res) { 

console.log("privilage: " + req.session.username); //Here is where I need to check and it says "undefined" 

    if(!req.session.username){ 
     res.send('-2'); 
    } 
    else res.send('1'); 
}); 

什么是错的究竟?

感谢所有:)

+0

一些变化,你可以发布你server.js或index.js文件?在哪里添加会话中间件? –

+1

此外,在旁注中,此代码似乎很容易受到SQL注入的影响。 – ROAL

+0

我为你编辑了我的帖子。谢谢。关于注射,我打算稍后修复它。 –

回答

0

您不使用商店会话。这意味着会话存储在内存中并在应用程序重新启动时重置。

app.use(session({ 
    secret: "This_is_a_secret", 
    resave: false, 
    store: ... 
})); 

确保您在登录和检查请求之间不重新启动应用程序。


此外,我建议,使你的代码

conn.query('SELECT * FROM users WHERE user_name="'+req.body.username+'" AND user_pass="'+req.body.password+'"', function(err, qres){ 
    if(err) { 
     console.log("Error!", err.message); 
     return res.send('-2'); // Maybe best way is res.status(401).end()? 
    } 

    if (qres.length == 0) { 
     console.log("No matching!"); 
     return res.send('-2'); 
    } 

    if (qres.length != 1) // unbelievable case, but check it 
     throw new Error("Smth wrong"); 

    req.session.username = req.body.username; 
    console.log("Successful login with: " + req.session.username);      
    res.send('1'); 
} 
+0

感谢您的帮助。我会做这些改变 –