Sitzungen in Node.js verwalten? [geschlossen]


100

Was ist der beste Weg, um Sitzungsvariablen in Node.js zu verwalten? Gibt es eine Bibliothek?

Antworten:


95

Sie können dies sehr einfach tun, indem Sie:

  • Verbinden: http://senchalabs.github.com/connect/

    Connects ist wie Rack in Ruby. Es gibt Ihnen eine zusätzliche Ebene, auf der Sie unter anderem mit Authentifizierung, Sitzungen und Cookies "spielen" können.

Eine andere Option ist die Verwendung von Frameworks:

  • Express.js: http://expressjs.com/

    Es scheint das am häufigsten verwendete Framework von node.js zu sein. Ist wie Sinatra für Ruby und läuft über Connect.

  • Geddy: http://geddyjs.org/

    Wenn Sie komplexere WebApps erstellen möchten, wählen Sie Geddy. Ist wie Rails für Ruby.


Was bietet geddy zusätzlich zu / over Express? - Gleicher Unterschied wie Sinatra und Rails?
Michael

1
@ Michael Geddy vs Express
Raynos

4
Ich denke, Sie sollten erwähnen, dass Express auf Connect basiert - alle Funktionen oder Addons, die mit Connect kompatibel sind, funktionieren mit Express.
Jonathan Dumaine



13

Laden Sie es einfach in den Memcache oder einen anderen Caching-Mechanismus. Ich würde Ihre Server nicht mit solchen Dingen belasten. Was ist der Sinn eines super schlanken Webservers, der sich an Dinge erinnern muss?

Ich würde auch versuchen, Ihre Website als Anwendung und nicht als Website zu entwickeln oder Ihre Website als Anwendung zu behandeln, die wunderbaren Funktionen von HTML5 wie lokalen Speicher / lokale Datenbanken zu nutzen und den Datenverkehr zwischen Server- und Client-Computern zu reduzieren .

Wenn alles andere fehlschlägt (oder die Site klein ist), schreiben Sie Ihre eigene Sitzungsklasse. Nicht so schwer. Vor allem, wenn es sich um eine In-Memory-Sache handelt. Setzen Sie eine Timer-Logik ein, um Sitzungen zu beenden, und los geht's. Verdammt in einer dynamischen Sprache wie JavaScript sollte ein Kinderspiel sein.

Die Struktur sollte ein Wörterbuch sein, wobei der Schlüssel die Sitzung und der Wert ein Objekt ist, das Details der letzten Kommunikation und Funktionen enthält (um den Zugriff auf bestimmte Funktionen zu ermöglichen). Fügen Sie eine Sweep-Funktion hinzu, um alte Sitzungen mit Zeitüberschreitung zu löschen. und Bingo. Ein grundlegender Sitzungsdienst. Eine grundlegende Überprüfung von "Ist Sitzungsschlüssel in der Liste ... Ja / Nein ... Details abrufen" ... und ich denke, das ist es ... oder gibt es eine Funktion, die mir fehlt?

Ich persönlich würde Tools von Drittanbietern so lange wie möglich meiden. Sand der Zeit verschiebt sich sehr schnell und Sie können sich immer auf selbst entwickelten Code verlassen.


16
Nach meiner Erfahrung binden Sie sich jedes Mal, wenn Sie ein neues Tool eines Drittanbieters hinzufügen, an diesen Drittanbieter, um die Lebenserwartung des von Ihnen entwickelten Produkts zu gewährleisten. Dies ist schlecht, der Mangel an Kontrolle und Verständnis für die Idee eines guten Codes, der in einer Blackbox enthalten ist, ist sehr schwer zu bewältigen, wenn in der oben genannten Blackbox etwas schief geht (was immer der Fall ist). Sie werden viele Haftungsausschlüsse finden, die mit Lizenzvereinbarungen von Drittanbietern verbunden sind. "Verwendung auf eigenes Risiko" ist eine, die ich häufig sehe. Sand der Zeit verschiebt sich schnell und nur weil jemand sagt, dass der Code 1.0 ist, heißt das nicht mehr Jack.
WeNeedAnswers

6
Wenn Sie den Code selbst programmieren und vor allem den Code verstehen können und der Code in angemessener Zeit entwickelt werden kann, warum sollten Sie dann ein Tool eines Drittanbieters verwenden? Und ich vertraue dem gesamten Code, den ich schreibe, weit mehr als einem Dritten. Ich bin ein Ingenieur, kein Künstler. Ich erstelle Code, der manchmal kaputt geht, aber nie zusammenbricht. Es gibt keine Ausreden für Code, der nicht getestet wurde. Mit solchen Tools wie Integrationstests, Unit-Tests und Regressionstests, mit welcher Ausrede sagen Sie, dass Ihr Code nicht getestet wurde? Vertrauen Sie mehr auf Ihre Talente. Sie sind so gut wie jeder Dritte.
WeNeedAnswers

10
Es gibt so viele Lücken in Ihrer Argumentation, dass ich nicht einmal weiß, wo ich anfangen soll. 1) Warum ein Drittanbieter-Tool verwenden: um Zeit und Energie zu sparen. 2) Open Source! = Keine Marke. Express / Connect werden von Teams erstellt und ihre Arbeit wurde von einer großen Community überprüft. Sie sind kein "Kind". 3) Die Neuerfindung von Rädern kostet Zeit. Vielleicht ist deine Zeit frei, die meisten Leute nicht. 4) Sie werden nie jede Schraube, jeden Bolzen und jeden Clip kennen. Alle moderne Software basiert auf Frameworks. Es gibt einfach zu viel, als dass eine Person alles wissen könnte. Ich glaube ehrlich gesagt nicht, dass Sie mit diesen Meinungen ein professioneller Entwickler sein können.
Kyeotic

6
Frameworks sind keine "Silberkugeln". Wenn Sie gegen ein Framework programmieren, erlauben Sie jemand anderem, die Kontrolle über die großen Entscheidungen über den Code für Sie zu übernehmen. Sicher können Sie das sehen? Diese großen Entscheidungen, die einmal getroffen wurden, sind sehr schwer nachzuvollziehen. Wenn das Framework zu umfassend ist, werden alle wichtigen Entscheidungen für Sie getroffen. Durch die Verwendung von Frameworks wird auch die eigentliche Programmierung verschleiert. Definieren Sie Ihre Interpretation eines Frameworks. Es gibt mehr als einen Framework-Typ. Einige Frameworks sind so in die Programmiersprache integriert, dass ich diese Programmiersysteme nennen würde.
WeNeedAnswers

5
Ich habe dich nie persönlich beleidigt, ich sagte, dein Argument habe Löcher und dann habe ich sie ausgekleidet. Sie! = Ihr Argument. Als ich sagte, ich glaube ehrlich gesagt nicht, dass Sie mit diesen Meinungen ein professioneller Entwickler sein können, meinte ich das allgemeine "Sie", nicht Sie speziell. Ihre Meinung zu Frameworks ignoriert die Tatsache, dass jede moderne Software sie verwendet. Ich stehe zu meiner Position und das geht nirgendwo hin. Ich stimme der akzeptierten Antwort zu, dass die Verwendung von Express / Connect der richtige Weg ist. Daher meine Verteidigung von Express.
Kyeotic

6

Donalds Antwort ist gut - sobald Sie sich mit dem Zwiebelmuster der Connect-Middleware vertraut gemacht haben, müssen Sie entscheiden, welche Art von Sitzungsspeicher verwendet werden soll. Die Standardeinstellung in Express ist ein MemoryStore und ist nicht für die Verwendung in der Produktion vorgesehen. Hier sind einige Ihrer Möglichkeiten:

Mongo https://github.com/mikkel/express-session-mongo - Verwenden Sie unbedingt die Option 'native_parser: false'.

Redis https://github.com/visionmedia/connect-redis - Sehr gut, aber wenn Sie Redis nicht bereits für Pub / Sub oder Speicher verwenden, ist es möglicherweise nicht ideal.

Beachten Sie, dass es andere Möglichkeiten gibt - dies hängt von Ihrem Projekt ab. Suchen Sie nach etwas, das Sie mithilfe Ihres vorhandenen Technologie-Stacks einführen können.


3
Ich möchte mich auf "Die Standardeinstellung in Express ist MemorySrote und ist nicht für die Verwendung in der Produktion vorgesehen" konzentrieren. Gehen Sie zu engineering.linkedin.com/nodejs/… und lesen Sie Punkt 7.
guiomie

4
Das ist interessant. Wie würden Sie Benutzerberechtigungen verwalten, wenn Sie nicht Sitzungen verwalten?
Costa

2

Wenn Sie eine ernsthafte Webentwicklung mit Node.js suchen, verwenden Sie das Express-Framework . Es unterstützt Sitzungen.

Erstellen Sie das Express-Projekt mit den Optionen --sessions.

$ express --sessions

So installieren Sie Express:

$ npm install express -g

Nicht länger unterstützt. Sie müssen cookie-sessionzu Ihrer package.josnArbeit hinzufügen .
Victor Schröder
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.