簡體   English   中英

NodeJS會話,cookie和mysql

[英]NodeJS sessions, cookies and mysql

我正在嘗試構建一個auth系統,我有app.js

var express = require('express')
  , MemoryStore = require('express').session.MemoryStore
  , app = express();

app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat', store: new MemoryStore({ reapInterval: 60000 * 10 })}));
app.use(app.router);

和route.index為

var express = require('express')
  , mysql = require('mysql')
  , crypto = require('crypto')
  , app = module.exports = express();

app.get('/*',function(req,res){
    var url = req.url.split('/');
    if (url[1] == 'favicon.ico')
        return;

    if (!req.session.user) {
        if (url.length == 4 && url[1] == 'login') {     
            var connection = mysql.createConnection({
                host     : 'localhost',
                user     : 'user',
                password : 'pass',
            });
            var result = null;
            connection.connect();
            connection.query('use database');
            var word = url[3];
            var password = crypto.createHash('md5').update(word).digest("hex");
            connection.query('SELECT id,level FROM users WHERE email = "'+url[2]+'" AND password = "'+password+'"', function(err, rows, fields) {
              if (err) throw err;
                for (i in rows) {
                    result = rows[i].level;
                }
                req.session.user = result;
            });
            connection.end();
        }
    }

console.log(req.session.user)

當我第一次訪問http://mydomain.com/login/user/pass時它在最后一次控制台調用中顯示但是第二次訪問cookie是干凈的

為什么你不只是使用Express的會話處理? 如果您使用快速命令行工具作為express --sessions ,它將創建具有會話支持的項目模板。 從那里,您可以將會話行復制到當前項目中。 關於如何使用Node.js在Express.js中使用會話的更多信息 (看起來這可能是重復的)

至於清理SQL,你似乎正在使用庫,如果你使用參數化查詢(即,占位符),它將為你的輸入提供優惠。

最后,你使用Express錯誤(沒有冒犯)。 Express的路由器可以讓你分割很多你的路由(以及允許你配置favicon。請參閱無法用Express.js更改Favicon (第二個答案)。使用'/ *'路由將捕獲所有GET請求,這大大限制路由器可以為您做什么。

(繼續評論;將其放在代碼塊中)現在你有一個支持會話支持的應用程序,試試這兩個路徑

app.get('/makesession', function (req, res) {
    req.session.message = 'Hello world';
    res.end('Created session with message : Hello world');
});
app.get('/getsession', function (req, res) {
    if (typeof req.session.message == 'undefined') {
        res.end('No session');
    } else {
        res.end('Session message: '+req.session.message);
    }
});

如果您在瀏覽器中導航到/ makesession,它將設置會話消息並通知您它已執行。 現在,如果您導航到/ getsession,它將返回會話消息(如果存在),否則它將告訴您會話不存在。

您需要將cookie值保存在響應對象中:

res.cookie('session', 'user', result);

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

暫無
暫無

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

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