Ergebnis 1 bis 6 von 6
  1. #1
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    20-12-2013
    Beiträge
    872

    Gleich nach Login ausgeloggt, expressjs

    Ich habe ein echt nerviges Problem bei meinem Login System.
    Ich werde nach einer Zufälligen zeit aus den System ausgeloggt, meist nach ein paar sec.
    Mach mal klappt es aber auch.

    login route:
    Code:
    app.post("/login", function(req, res) {
            var userName = req.body.email;
            var pass = req.body.password;
            var remember = req.body.remember;
            //cookie zrücksetzen
            if(req.session.cookie.maxAge !== null){
            	delete req.session.cookie.maxAge;
            	delete req.session.cookie.expires;
            	//req.session.cookie.maxAge = null;
            	//req.session.cookie.expires = false;// or null
            }
            athenticate(req.body.email, req.body.password, function(err, id, callsign) {
                if (err) {
                    return modifyForms("login", err.message, function(err, result) {
                        if (err) {
                            res.send(err);
                        } else {
                            res.send(result);
                        }
                    })
                } else {
                    if (id) {
                        checkConfirmed(callsign, function(err) {
                            if (err) {
                                return modifyForms("login", err.message, function(result) {
                                    res.send(result);
                                });
                            } else {
                                if (remember) {
                                    var hour = 60 * 60 * 1000;
                                    req.session.cookie.expires = new Date(Date.now() + hour);
                                    req.session.cookie.maxAge = hour;
                                }
                                req.session.callsign = callsign;
                                req.session.uid = id;
                                res.redirect('profile?tab=dashboard');
                            }
                        });
                    } else {
                        req.session.error = "Login failed, try again";
                        res.redirect('login');
                    } //if id
                }
            });
        });
    Interessant ist nur:
    Code:
          
     if (remember) {
                                    var hour = 60 * 60 * 1000;
                                    req.session.cookie.expires = new Date(Date.now() + hour);
                                    req.session.cookie.maxAge = hour;
                                }
                                req.session.callsign = callsign;
                                req.session.uid = id;
                                res.redirect('profile?tab=dashboard');
                            }
    oben habe ich noch folgendes stehen:
    Code:
           if(req.session.cookie.maxAge !== null){
            	delete req.session.cookie.maxAge;
            	delete req.session.cookie.expires;
            	//req.session.cookie.maxAge = null;
            	//req.session.cookie.expires = false;// or null
            }
    Da wollte ich das cookie zurücksetzen wenn man von der Hauptseite kommt weil ich dort eine User counter mit ip sperre habe.
    Aber wie setzt man das Cookie richtig zurück.
    Delete oder req.session.cookie.maxAge = null; oder req.session.cookie.maxAge = false ??

    Vollständigkeitshalber der Counter mit ip sperre
    Code:
      app.get("/", tracker, function(req, res) {
            //counter stuff
            var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
            var hour = 60 * 60 * 1000 * 8; //8 Stunden
            //wenn user eingelogt gehe nicht in die couter 
            if (!req.session.uid) {  
                //wenn ip noch nicht vorhanden zähle user
                if (!req.session.ip || req.session.ip !== ip) {
                    fs.readFile(__dirname+"/counts.txt", "utf8", function(err, data) {
                        var wstream = fs.createWriteStream(__dirname+"/counts.txt", "utf8");
                        if (err) {
                            throw err;
                        }
                        var counts = parseInt(data.split("\n")[0]); //nur erste zeile
                        counts += 1;
                        wstream.end(String(counts));
                    });
                    req.session.ip = ip;
                    req.session.cookie.expires = new Date(Date.now() + hour);
                    req.session.cookie.maxAge = hour;
                    clicksToDay += 1;
                }
            }
    ....
    ......
    es ist auch egal ob if (remember) true ist.

    Ich nutze express4.x mit express-session-middleware

    Ich nutze den standart memory Store, reicht für lokale Anwendung und 10 user.
    Die Initialisierung:
    Code:
    var session = require("express-session");
    var memoryStore = new session.MemoryStore();
    
       var sessionOptions = {
            store: memoryStore,
            secret: "*******",
            saveUninitialized: false,
            proxy: true,
            resave: true,
            cookie: {
                secure: false
            }
        };
    
    
      app.use("/piwik/plugins", express.static(__dirname + "/phpdocs/piwik/plugins"));
        app.use("/piwik/libs", express.static(__dirname + "/phpdocs/piwik/libs"));
        app.use("/adminer/images", express.static(__dirname + "/phpdocs/adminer/images"));
        app.use("/adminer/css", express.static(__dirname + "/phpdocs/adminer/css"));
        app.use("/adminer/fonts", express.static(__dirname + "/phpdocs/adminer/fonts"));
        app.all(/.+\.php$/, php.cgi("./phpdocs"))
        app.use(bodyParser.urlencoded({extended: true}));
        app.use(bodyParser.json());
        app.use(session(sessionOptions));
        app.use("/grabber/css", express.static(__dirname + "/css"));
        app.use("/css", express.static(__dirname + "/css"));
        app.use("/img", express.static(__dirname + "/img"));
        app.use("/grabber/lib", express.static(__dirname + "/scripts"));
    An den user counter liegt es nicht, das habe ich schon Auskommentiert gehabt.
    Mansch mal liegt es der reinfolge der Initialisierung.

    Das Problem macht mich echt wild
    Für konstruktive Vorschläge wäre ich sehr, sehr, dankbar.

  2. #2
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    20-12-2013
    Beiträge
    872

    AW: Gleich nach Login ausgeloggt, expressjs

    Aha, wichtig Erkenntnis.
    Ich führe node in einem cluster aus.
    https://nodejs.org/api/cluster.html#cluster_cluster
    Dann erst tritt das Problem auf.

    Aber wie lösen?

  3. #3
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: Gleich nach Login ausgeloggt, expressjs

    Wird ev. die session nicht innerhalb des clusters geteilt? (Bzw. wie werden die Sessiondaten gespeichert? Wenn die nur im RAM sitzen, musst du die Sessionverwaltung eigentlich im Master machen...)

    Dann könntest du manchmal auf einen anderen Worker kommen, der dich dann natürlich nicht kennt.

  4. #4
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    20-12-2013
    Beiträge
    872

    AW: Gleich nach Login ausgeloggt, expressjs

    Zitat Zitat von kkapsner
    Wird ev. die session nicht innerhalb des clusters geteilt?
    Jo, so ist es:
    node.js - Nodejs Clustering and expressjs sessions - Stack Overflow


    Zitat Zitat von kkapsner
    wie werden die Sessiondaten gespeichert?
    keine Ahnung, das macht der sesssion-memory-store.

    Zitat Zitat von kkapsner
    musst du die Sessionverwaltung eigentlich im Master machen...
    Wie?

    Aktuell ist der Aufbau so:
    Code:
    var cluster = require('cluster');
    var numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
        // Fork workers.
        for (var i = 0; i < numCPUs; i++) {
            cluster.fork();
        }
    
        cluster.on('exit', function(worker, code, signal) {
            console.log("worker " + worker.process.pid + " died");
        });
    } else {
     var bodyParser = require('body-parser');
        var session = require("express-session");
        var express = require("express");
        var mysql = require("mysql")
    //....
    //... usw...
    
    
    var memoryStore = new session.MemoryStore();
    
    var sessionOptions = {
            store: memoryStore,
            secret: "******",
            saveUninitialized: false,
            proxy: true,
            resave: true,
            cookie: {
                secure: false
            }
        };
    
    //...
    //.....
     app.use(session(sessionOptions));
    
    
     W_Server.listen(2000, function() {
            console.log("Server listen at port 2000")
        });
    } //cluster

  5. #5
    tsseh ist offline Foren-Gott
    registriert
    19-05-2008
    Beiträge
    5.667

    AW: Gleich nach Login ausgeloggt, expressjs

    die lösung steht doch in deinem link. wenn du als datenspeicher bei allen eine db nimst, haben alle zugriff auf die daten, wenn es ein stück speicher ist wie bei dir, hat jeder prozess eigene daten, was nicht gewünscht ist.

  6. #6
    Avatar von xorg1990
    xorg1990 ist offline König
    registriert
    20-12-2013
    Beiträge
    872

    AW: Gleich nach Login ausgeloggt, expressjs

    Ja gut, dann werde ich das wohl einbasteln müssen. ist ja so viel auch nicht.

Ähnliche Themen

  1. Eigenartiges verhalten bei Logout mit expressjs
    Von xorg1990 im Forum Node.js
    Antworten: 2
    Letzter Beitrag: 29-07-2016, 14:19
  2. [FRAGE] website auslesen nach login
    Von cyb0rg im Forum JavaScript
    Antworten: 17
    Letzter Beitrag: 14-07-2016, 17:40
  3. expressjs response zu JqueryAjax will nicht
    Von xorg1990 im Forum Ajax
    Antworten: 4
    Letzter Beitrag: 01-09-2015, 22:22
  4. Amok! Ausgeloggt und dann vergessen ...
    Von SteelWheel im Forum Forum
    Antworten: 2
    Letzter Beitrag: 17-08-2015, 07:55
  5. weiterleitung nach login
    Von manfredi im Forum Serverseitige Programmierung
    Antworten: 16
    Letzter Beitrag: 15-05-2006, 10:11

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •