suchen
HeimWeb-Frontendjs-TutorialSo verwenden Sie Sitzungs- und Cookie-Methoden in Express (ausführliches Tutorial)

Dieser Artikel stellt hauptsächlich vor, wie Express Sitzungen und Cookies verwendet. Jetzt teile ich ihn mit Ihnen und gebe ihn als Referenz.

Zustandsloses http

Wir alle wissen, dass http-Anfragen und -Antworten unabhängig voneinander sind und der Server nicht erkennen kann, ob zwei http-Anfragen vom selben Benutzer gesendet werden. Mit anderen Worten: Der Server ist nicht in der Lage, den Kommunikationsstatus aufzuzeichnen. Normalerweise verwenden wir Cookies und Sitzungen, um die Identität beider Parteien in der Sitzung zu ermitteln.

Cookie

Cookie wird vom Server an verschiedene Benutzer gesendet. Diese Kennung stellt die Identität des Benutzers dar. Mithilfe dieser Kennung wird der Benutzer identifiziert, dabei werden die relevanten Daten des Benutzers auf dem Server abgefragt und anschließend an den Benutzer gesendet.

Installieren Sie die von Express bereitgestellte Cookie-Parser-Middleware:

npm i -S cookie-parser

Führen Sie das Cookie-Parser-Plug-in in das von uns verwendete Projektseitenmodul ein und instanziieren Sie es dann wie folgt:

var cookieParser = require('cookie-parser');
var cp = cookieParser(secret, options);

Der erste Parameter ist „geheim“, der zum Signieren von Cookies verwendet werden kann, was wir oft als Cookie-Verschlüsselung bezeichnen. Es kann sich um eine Zeichenfolge oder ein Array handeln. Schüler, die mit den Verschlüsselungsprinzipien vertraut sind, sollten wissen, dass es sich bei dieser Zeichenfolge um den Chiffretext handelt, der dem Server gehört. Die zweiten Parameteroptionen enthalten die folgenden optionalen Parameter:

  1. Pfad: Geben Sie den vom Cookie betroffenen Pfad an

  2. expires: Geben Sie das Zeitformat an

  3. maxAge: Geben Sie an, wann das Cookie ablaufen soll

  4. sicher: Wenn der sichere Wert wahr ist, ist er nur in HTTPS gültig; andernfalls ist das Cookie in HTTP gültig.

  5. httpOnly: Der Browser lässt nicht zu, dass Skripte document.cookie ausführen, um Cookies zu ändern. Wenn Sie es auf „true“ setzen, können Sie Angriffe durch Cookie-Parser vermeiden und auch Cookie-Daten verschlüsseln, die wir „signedCookies“ nennen.

signedCookies

Der Implementierungscode lautet wie folgt:

var path = require('path');
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();

// 使用 cookieParser 中间件;
app.use(cookieParser());

// 如果请求中的 cookie 存在 isFirst
// 否则,设置 cookie 字段 isFirst, 并设置过期时间为10秒
app.get('/', function(req, res) {
  if (req.cookies.isFirst) {
    res.send("再次欢迎访问");
    console.log(req.cookies)
  } else {
    res.cookie('isFirst', 1, { maxAge: 60 * 1000});
    res.send("欢迎第一次访问");
  }
});

app.listen(3030, function() {
  console.log('express start on: ' + 3030)
});

Aus dem obigen Code wissen wir, dass der erste Parameter von Cooke-Parser die angeben kann Serverseitiger Anbieter-Verschlüsselungsschlüssel, und dann verwenden wir das signierte Konfigurationselement in den Optionen, um die Verschlüsselung zu implementieren. Obwohl dies relativ sicher ist, weist das Cookie des Clients Einschränkungen auf. Wenn der Client eine Anforderung sendet, erhöht sich die Datenmenge im Anforderungsheader, wodurch sich die Anforderungsgeschwindigkeit verlangsamt und keine Datenfreigabe möglich ist.

session

Express-Session ist eine Middleware von ExpressJS, die zum Erstellen von Sitzungen verwendet wird. Der Server generiert eine Sitzungs-ID, und der Client verwendet ein Cookie, um die verschlüsselten Anforderungsinformationen der Sitzungs-ID zu speichern und die vom Benutzer angeforderten Daten auf dem Server zu speichern. Er kann jedoch auch die Daten des Benutzers verschlüsseln und speichern auf der Kundenseite.

session zeichnet den Sitzungsstatus zwischen dem Client und dem Server auf, der zur Bestimmung der Identität des Clients verwendet wird. Express-Session unterstützt den Sitzungsspeicherort

, der in Cookies, im Speicher oder auf Servern von Drittanbietern wie Redis und Mongodb gespeichert werden kann.

Sitzungen werden standardmäßig im Speicher gespeichert, und die Abfragegeschwindigkeit beim Speichern in Nicht-Redis-Datenbanken ist zu langsam in Redis (Cache-Datenbank).

Installieren Sie den von Express bereitgestellten Express-Session-Middleware-Installationsbefehl:

var path = require('path');
var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();

// 使用 cookieParser 中间件;
app.use(cookieParser('my_cookie_secret'));

// cookie
app.get('/', function(req, res) {
  if (req.signedCookies.isFirst) {
    res.send("欢迎再一次访问");
    console.log(req.signedCookies)
  } else {
    res.cookie('isFirst', 1, { maxAge: 60 * 1000, signed: true});
    res.send("欢迎第一次访问");
  }
});

Führen Sie das Express-Session-Plug-In in das von uns verwendete Projektseitenmodul ein und instanziieren Sie es dann wie folgt:

npm i -S express-session
Die Parameteroptionen-Konfigurationselemente von

session() umfassen hauptsächlich:

name: Setzen Sie das Cookie, um den Feldnamen der Sitzung zu speichern. Der Standardwert ist connect.sid

    store: Die Speichermethode der Sitzung, standardmäßig wird sie im Speicher gespeichert, wir können Redis usw. anpassen.
  1. genid: Beim Generieren eine neue session_id, standardmäßig wird uid2 verwendet. Dieses NPM-Paket
  2. rolling: Setzt ein Cookie für jede Anfrage zurück, der Standardwert ist false
  3. resave : Auch wenn die Sitzung nicht geändert wurde, speichern Sie den Sitzungswert, der Standardwert ist wahr
  4. saveUninitialized: Erzwingen Sie das Speichern der nicht initialisierten Sitzung in der Datenbank
  5. geheim: Übergeben Sie die festgelegte geheime Zeichenfolge, um den Hash-Wert zu berechnen und in das Cookie einzufügen, um das generierte signierteCookie manipulationssicher zu machen
  6. Cookie: Legen Sie die relevanten Optionen fest für das Cookie, das die Sitzungs-ID speichert
  7. Was können wir also damit machen? Im Folgenden stellen wir sie einzeln vor.
  8. Cookie-Sitzung

Cookie-Sitzung ist sehr einfach zu verwenden. Wir verwenden das Cookie-Konfigurationselement, um die Sitzungsdaten im Cookie zu speichern zu signiertenCookies Beide speichern die Daten auf dem Client und verschlüsseln die Daten, aber die durch die verschlüsselte Anfrage erhaltene Datenstruktur ist unterschiedlich.

Die Struktur der Cooke-Sitzung ist wie folgt:

var session = require('express-session');
var se = session(options);
Die Struktur von signiertemCookie ist wie folgt:

Session {
 cookie:
  { path: '/',
   _expires: 2018-01-29T17:58:49.950Z,
   originalMaxAge: 60000,
   httpOnly: true },
 isFirst: 1 }

Der Code zum Implementieren der Cookie-Sitzung ist wie folgt:

{ isFirst: '1' }

Signed-Cookie vs. Cookie-Sitzung

SignedCookies-Informationen sind sichtbar, können aber nicht geändert werden, Cookie-Sitzung ist unsichtbar und kann nicht geändert werden

    SignedCookies-Informationen werden lange Zeit auf dem Client gespeichert. Der letztere Client wird geschlossen und die Informationen verschwinden

针对Cooke session增加了客户端请求的数据规模,我们一般这样使用,数据库存储session。

数据库保存session

用数据库保存session,我们一般使用redis,因为它是缓存数据库,查询速度相较于非缓存的速度更快。

express-session 的实例代码如下:

var path = require('path');
var express = require('express');
var session = require('express-session');
var redisStore = require('connect-redis')(session);
var app = express();

// session
app.use(session({
  name: 'session-name', // 这里是cookie的name,默认是connect.sid
  secret: 'my_session_secret', // 建议使用 128 个字符的随机字符串
  resave: true,
  saveUninitialized: false,
  store: new redisStore({
    host: '127.0.0.1',
    port: '6379',
    db: 0,
    pass: '',
  })
}));

// route
app.get('/', function(req, res) {
  if (req.session.isFirst) {
    res.send("欢迎再一次访问。");
    console.log(req.session)
  } else {
    req.session.isFirst = 1;
    res.send("欢迎第一次访问。");
  }
});

app.listen(3030, function() {
  console.log('express start on: ' + 3030)
});

但有时我们也使用非redis数据库保存session,这时我们就需要对项目结构有深刻的认识和理解;否则,使用后反而会适得其反。

另外,我们要注意使用数据库保存session数据,在浏览器端的session-id会随着浏览器的关闭而消失,下次打开浏览器发送请求时,服务器依然不能识别请求者的身份。

cookie session 虽然能解决这个问题,但是它本身存在着安全风险,其实cookie session 和 signedCookies都面临xss攻击。

其实,使用signedCookies和session的结合会在一定程度上降低这样的风险。

signedCookies(cookies) 和 session的结合

在开发中,我们往往需要signedCookies的长期保存特性,又需要session的不可见不可修改的特性。

var path = require('path');
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var redisStore = require('connect-redis')(session);
var app = express();

// 使用 cookieParser 中间件;
app.use(cookieParser());

// session
app.use(session({
  name: 'session-name', // 这里是cookie的name,默认是connect.sid
  secret: 'my_session_secret', // 建议使用 128 个字符的随机字符串
  resave: true,
  saveUninitialized: false,
  // cookie: { maxAge: 60 * 1000, httpOnly: true },
  store: new redisStore({
    host: '127.0.0.1',
    port: '6379',
    db: 0,
    pass: '',
  })
}));

app.get('/', function(req, res, next) {
  if(req.session.isFirst || req.cookies.isFirst) {
    res.send("欢迎再一次访问");
  } else {
    req.session.isFirst = 1;
    res.cookie('isFirst', 1, { maxAge: 60 * 1000, singed: true});
    res.send("欢迎第一次访问。");
  }
});

app.listen(3030, function() {
  console.log('express start on: ' + 3030)
});

这样我们将session保存在redis中的信息,保存在了session_id所标示的客户端cooke中一份,这样我们就不用担心,浏览器关闭,cookie中的session_id字段就会消失的情况,因为浏览器中还有它的备份cookie,如果没有备份的cookie信息,下次客户端再次发出请求浏览就无法确定用户的身份。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在ES6中详细解读let和闭包

在vue+iview+less+echarts中实战项目(详细教程)

详细解说vue编码风格

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Sitzungs- und Cookie-Methoden in Express (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Die Beziehung zwischen JavaScript, C und BrowsernDie Beziehung zwischen JavaScript, C und BrowsernMay 01, 2025 am 12:06 AM

Einführung Ich weiß, dass Sie es vielleicht seltsam finden. Was genau muss JavaScript, C und Browser tun? Sie scheinen nicht miteinander verbunden zu sein, aber tatsächlich spielen sie eine sehr wichtige Rolle in der modernen Webentwicklung. Heute werden wir die enge Verbindung zwischen diesen drei diskutieren. In diesem Artikel erfahren Sie, wie JavaScript im Browser ausgeführt wird, die Rolle von C in der Browser -Engine und wie sie zusammenarbeiten, um das Rendern und die Interaktion von Webseiten voranzutreiben. Wir alle kennen die Beziehung zwischen JavaScript und Browser. JavaScript ist die Kernsprache der Front-End-Entwicklung. Es läuft direkt im Browser und macht Webseiten lebhaft und interessant. Haben Sie sich jemals gefragt, warum Javascr

Node.js Streams mit TypeScriptNode.js Streams mit TypeScriptApr 30, 2025 am 08:22 AM

Node.js zeichnet sich bei effizienten E/A aus, vor allem bei Streams. Streams verarbeiten Daten inkrementell und vermeiden Speicherüberladung-ideal für große Dateien, Netzwerkaufgaben und Echtzeitanwendungen. Die Kombination von Streams mit der TypeScript -Sicherheit erzeugt eine POWE

Python vs. JavaScript: Leistung und EffizienzüberlegungenPython vs. JavaScript: Leistung und EffizienzüberlegungenApr 30, 2025 am 12:08 AM

Die Unterschiede in der Leistung und der Effizienz zwischen Python und JavaScript spiegeln sich hauptsächlich in: 1 wider: 1) Als interpretierter Sprache läuft Python langsam, weist jedoch eine hohe Entwicklungseffizienz auf und ist für eine schnelle Prototypentwicklung geeignet. 2) JavaScript ist auf einen einzelnen Thread im Browser beschränkt, aber Multi-Threading- und Asynchronen-E/A können verwendet werden, um die Leistung in Node.js zu verbessern, und beide haben Vorteile in tatsächlichen Projekten.

Die Ursprünge von JavaScript: Erforschung seiner ImplementierungsspracheDie Ursprünge von JavaScript: Erforschung seiner ImplementierungsspracheApr 29, 2025 am 12:51 AM

JavaScript stammt aus dem Jahr 1995 und wurde von Brandon Ike erstellt und realisierte die Sprache in C. 1.C-Sprache bietet Programmierfunktionen auf hoher Leistung und Systemebene für JavaScript. 2. Die Speicherverwaltung und die Leistungsoptimierung von JavaScript basieren auf C -Sprache. 3. Die plattformübergreifende Funktion der C-Sprache hilft JavaScript, auf verschiedenen Betriebssystemen effizient zu laufen.

Hinter den Kulissen: Welche Sprache macht JavaScript?Hinter den Kulissen: Welche Sprache macht JavaScript?Apr 28, 2025 am 12:01 AM

JavaScript wird in Browsern und Node.js -Umgebungen ausgeführt und stützt sich auf die JavaScript -Engine, um Code zu analysieren und auszuführen. 1) abstrakter Syntaxbaum (AST) in der Parsenstufe erzeugen; 2) AST in die Kompilierungsphase in Bytecode oder Maschinencode umwandeln; 3) Führen Sie den kompilierten Code in der Ausführungsstufe aus.

Die Zukunft von Python und JavaScript: Trends und VorhersagenDie Zukunft von Python und JavaScript: Trends und VorhersagenApr 27, 2025 am 12:21 AM

Zu den zukünftigen Trends von Python und JavaScript gehören: 1. Python wird seine Position in den Bereichen wissenschaftlicher Computer und KI konsolidieren. JavaScript wird die Entwicklung der Web-Technologie fördern. Beide werden die Anwendungsszenarien in ihren jeweiligen Bereichen weiter erweitern und mehr Durchbrüche in der Leistung erzielen.

Python vs. JavaScript: Entwicklungsumgebungen und ToolsPython vs. JavaScript: Entwicklungsumgebungen und ToolsApr 26, 2025 am 12:09 AM

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Ist JavaScript in C geschrieben? Prüfung der BeweiseIst JavaScript in C geschrieben? Prüfung der BeweiseApr 25, 2025 am 12:15 AM

Ja, der Motorkern von JavaScript ist in C. 1) Die C -Sprache bietet eine effiziente Leistung und die zugrunde liegende Steuerung, die für die Entwicklung der JavaScript -Engine geeignet ist. 2) Die V8-Engine als Beispiel wird sein Kern in C geschrieben, wobei die Effizienz und objektorientierte Eigenschaften von C kombiniert werden.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung