Gibt es eine Möglichkeit zu steuern, wenn eine Sitzung mit Verbindungssitzungs-Middleware beginnt?Steuern der Sitzung Starten Sie mit Express und verbinden Sie Middleware
Zum Beispiel, wenn ich ausdrücklich app config:
var app = express();
app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('secret'));
app.use(express.session({ store:sessionStore, ... }));
});
Dann auf jede Anfrage, wenn keine Session-Cookie gegeben wird, wird eine Sitzung gestartet wird. Was passiert, wenn ich eine Sitzung nur dann starten möchte, wenn der Benutzer authentifiziert wurde?
Zum Beispiel sagen, ich habe zwei Routen /protected
und /login
.
- Wenn jemand
/protected
ohne Session-Cookie trifft, wird die Middleware NICHT eine neue Sitzung starten. (req.session
istnull
) - Wenn jemand
/protected
mit einem Session-Cookie trifft, die Middleware wird Check, um zu sehen, ob es eine passende aktive Sitzung für den Cookie ist und setztereq.session
, aber keine neue Sitzung starten. (req.session
könnte einen Wert hat oder seinenull
) - Wenn jemand
/login
mit dem richtigen params trifft, dann wird eine Sitzung explizit und ein Cookie gesetzt wird nur dann gestartet.
Der einzige Weg, um eine Sitzung starten explizit sein soll: mit der bestehenden Verbindung Session-Middleware
app.post('/login', function(req, res, next) {
// connect to database and validate user...
db.authenticate(req.body.user, req.body.pass, function(allow) {
if (allow) {
// START SESSION HERE
// this will send set the cookie
}
});
}
Gibt es eine Möglichkeit, dies zu erreichen?
Wenn Sie verwenden einen Backing-Datenbank-Sitzungsspeicher. Dann erstellt * jeder * anonyme Benutzer Sitzungen, die in der Datenbank gespeichert sind. – ralouphie
Ich verstehe das, aber Sie sollten nicht immer Sitzungsdaten für immer behalten. Wenn die Sitzungsdaten ablaufen, sollten sie entfernt werden. Wenn ein anonymer Benutzer nur einige Seiten auf Ihrer Website besucht, sollte er nach dem Verlassen der Website ziemlich schnell entfernt werden. Auch die Sitzungen für die anonymen Benutzer werden im Wesentlichen leere Objekte sein (korrigieren Sie mich, wenn ich falsch liege) und sollte daher keine große Speicherlast sein. –
Wie die Session-Middleware funktioniert, wird eine Sitzung für jeden Benutzer ohne einen (ohne den Cookie) erstellt. Dies bedeutet, dass die Datenbank einen Eintrag für jede Anfrage hat, die keinen Cookie sendet.In dem System, an dem ich arbeite, ist das inakzeptabel. – ralouphie