Heim  >  Artikel  >  Web-Frontend  >  Werfen wir einen Blick auf Cookies und Sitzungen in NodeJS

Werfen wir einen Blick auf Cookies und Sitzungen in NodeJS

青灯夜游
青灯夜游nach vorne
2021-03-09 10:05:121829Durchsuche

Dieser Artikel stellt Ihnen Cookies und Sitzungen in nodejs vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Werfen wir einen Blick auf Cookies und Sitzungen in NodeJS

Verwandte Empfehlungen: „nodejs Tutorial

Ich bin es gewohnt, Plug-Ins im Framework zu verwenden, als ich kürzlich die Grundmodule von Node überprüfte, musste ich mich fragen: Was ist ein Keks? Was ist eine Sitzung? Was sind die Unterschiede und Zusammenhänge zwischen den beiden? Bietet Node.js entsprechende Module zur Verwaltung von Speichersitzungen? Wenn kein entsprechendes Modul bereitgestellt wird, wie sollten wir ein Modul ähnlich der Sitzungsverwaltung implementieren? Cookie und Sitzung? Sowohl Sitzung als auch Cookie basieren auf dem Webserver. Der Unterschied besteht darin, dass das Cookie auf dem Client gespeichert wird, während die Sitzung wird serverseitig gespeichert.

Wenn ein Benutzer eine Website durchsucht, speichert der Webserver einige Informationen über den aktuellen Benutzer im Browser, und was auf dem lokalen Webclient gespeichert wird, sind Cookie-Daten. Auf diese Weise überprüft und liest der Webserver beim nächsten Besuch derselben Website zunächst die lokalen Cookie-Informationen. Wenn ein Cookie vorhanden ist, bestimmt er dessen Ablaufzeit basierend auf dem Inhalt des Cookies und gibt so etwas zurück Daten an den Benutzer.

Die Verwendung von Cookies ist sehr verbreitet – viele Websites, die personalisierte Dienste unterstützen, verwenden Cookies hauptsächlich zur Identifizierung von Benutzern, um die Bereitstellung von auf den Benutzer zugeschnittenen Inhalten, wie z. B. kostenlosen E-Mails, auf der Weboberfläche zu erleichtern. Ein weiteres Beispiel: „7 Tage kein Login“, das von den meisten Websites unterstützt wird. Konkret verwendet der Cookie-Mechanismus eine Lösung, die den Zustand auf der Clientseite beibehält, während der Sitzungsmechanismus eine Lösung verwendet, die den Zustand auf der Serverseite beibehält. Gleichzeitig können wir auch erkennen, dass der Sitzungsmechanismus möglicherweise den Cookie-Mechanismus verwenden muss, um den Zweck der Speicherung der Identität zu erreichen, da das serverseitige Zustandserhaltungsschema auch eine Identität auf der Clientseite speichern muss. Aber es gibt tatsächlich andere Möglichkeiten. Die orthodoxe Cookie-Verteilung erfolgt durch Erweiterung des HTTP-Protokolls. Der Server fügt dem HTTP-Antwortheader eine spezielle Identifikationszeile hinzu, um den Browser aufzufordern, das entsprechende Cookie gemäß den Anweisungen zu generieren. Allerdings können auch reine clientseitige Skripte wie JavaScript oder VBScript Cookies generieren - document.cookie='xxx=xxx'.

Cookies sind sitzungsbasiert

Die Verwendung von Cookies wird vom Browser nach bestimmten Grundsätzen automatisch im Hintergrund an den Server gesendet. Der Browser überprüft alle gespeicherten Cookies. Wenn der deklarierte Bereich eines Cookies größer oder gleich dem Speicherort der anzufordernden Ressource ist, kann das Cookie an den HTTP-Anforderungsheader angehängt werden, um die Ressource anzufordern, und an den Server gesendet werden.


Cookie-Inhalte umfassen hauptsächlich: Name, Wert, Ablaufzeit, Pfad und Domäne. Der Pfad und die Domäne bilden zusammen den Geltungsbereich des Cookiesdocument.cookie='xxx=xxx; expires=xxx'

cookie是基于session的

cookie的使用却是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则可把该cookie附在去请求资源的http请求头上发送给服务器。
Cookie的内容主要包括:名字、值、过期时间、路径和域。路径与域一起构成Cookie的作用范围。若不设置过期时间,则表示这个Cookie的生命期为浏览器会话期间,关闭浏览器窗口,Cookie 就消失。这种生命期为浏览器会话期的Cookie,被称为会话Cookie。会话Cookie一般不存储在硬盘上,而是保存在内存里,当然这种行为并不是规范的。若设置了过期时间,浏览器就会把Cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie仍然有效,直到超过设定的过期时间。

而对于保存在内存里的Cookie, 不同的浏览器有不同的处理方式。Session机制是一种服务器端的机制,服务器使用类似于散列表的结构(也可能真的使用散列表)来保存信息。当程序需要为某个客户端的请求创建一个 Session 时,服务器首先检查这个客户端的请求里是否已包含了一个Session标识(称为Session id),如果已包含则说明以前已经为此客户端创建过Session,服务器就按照Session id把这个Session检索出来使用(检索不到,会新建一个), 如果客户端请求不包含Session id,则为此客户端创建一个Session并且生成-一个与此Session相关联的Session id, Session id的值应该是一个既不会重复,又不容易被发现其生成规律的字符串,这个Session id将在本次响应中被返回给客户端保存。保存这个Session id的方式可以采用Cookie,这样在交互过程中浏览器可以自动按照规则把这个标识发送给服务器。一般这个Cookie的名字都类似于SESSID。

Session模块的实现

既然session如此“重要”,我们不妨来看看session模块:
PHP中内置了session方法可供调用,例如session_start以及$_SESSION. Wenn die Ablaufzeit nicht festgelegt ist, bedeutet dies, dass die Lebensdauer dieses Cookies während der Browsersitzung liegt. Wenn das Browserfenster geschlossen wird, verschwindet das Cookie. Diese Art von Cookie, dessen Lebensdauer die Browsersitzung umfasst, wird als Sitzungscookie bezeichnet. Sitzungscookies werden im Allgemeinen nicht auf der Festplatte, sondern im Speicher gespeichert. Dieses Verhalten ist natürlich nicht standardisiert. Wenn eine Ablaufzeit eingestellt ist, speichert der Browser die Cookies auf der Festplatte. Wenn Sie den Browser schließen und erneut öffnen, bleiben diese Cookies weiterhin gültig, bis die eingestellte Ablaufzeit überschritten ist.

🎜 Verschiedene Browser verfügen über unterschiedliche Verarbeitungsmethoden für im Speicher gespeicherte Cookies. Der Sitzungsmechanismus ist ein serverseitiger Mechanismus. Der Server verwendet eine Struktur ähnlich einer Hash-Tabelle (oder verwendet möglicherweise tatsächlich eine Hash-Tabelle), um Informationen zu speichern. Wenn das Programm eine Sitzung für die Anfrage eines Clients erstellen muss, prüft der Server zunächst, ob die Anfrage des Clients bereits eine Sitzungskennung (sogenannte Sitzungs-ID) enthält. Der Server ruft die Sitzung entsprechend der Sitzungs-ID ab und verwendet sie (wenn sie nicht abgerufen werden kann, erstellt er eine neue. Wenn die Client-Anfrage die Sitzungs-ID nicht enthält, wird eine Sitzung für den Client erstellt und eine Sitzung zugeordnet). Wenn diese Sitzungs-ID generiert wird, sollte der Wert der Sitzungs-ID eine Zeichenfolge sein, die weder wiederholt noch leicht zu erkennen ist. Diese Sitzungs-ID wird zur Speicherung in dieser Antwort an den Client zurückgegeben. Mithilfe von Cookies kann diese Sitzungs-ID gespeichert werden, sodass der Browser während der Interaktion diese Identifizierung gemäß den Regeln automatisch an den Server senden kann. Im Allgemeinen ähnelt der Name dieses Cookies SESSID. 🎜🎜🎜Implementierung des Sitzungsmoduls🎜🎜🎜Da die Sitzung so „wichtig“ ist, können wir uns auch das Sitzungsmodul ansehen: 🎜 PHP verfügt über integrierte Sitzungsmethoden zum Aufrufen, wie z. B. session_start und $ _SESSIONusw. Das native Node.js stellt jedoch kein Sitzungsverwaltungsmodul bereit, sodass wir eines selbst implementieren können: 🎜

Basierend auf der obigen Einführung in Sitzung und Cookies fällt es uns nicht schwer, die Logik herauszufinden
Werfen wir einen Blick auf Cookies und Sitzungen in NodeJS
(Tatsächlich prüft der Server, ob die Sitzung eine entsprechende Sitzungs-ID im Cookie des Browsers hat)

Wie in der Abbildung gezeigt Bild oben: Der Client fordert zuerst eine Sitzung an. Wenn der Server überprüft, ob das Cookie im Client keine entsprechende Sitzungs-ID hat, generiert er auf bestimmte Weise eine neue Sitzungs-ID dafür, und wenn die Sitzungs-ID vorhanden ist im Cookie und ist nicht abgelaufen, dann werden die Sitzungsdaten direkt zurückgegeben.
Dann können wir gemäß dem obigen Prozessdiagramm und der Einführung zunächst drei Methoden für die Module erstellen, die wir implementieren müssen, nämlich start, newSession und cleanSessions. Die Startmethode startet hauptsächlich die Sitzungsverwaltung, newSession erstellt hauptsächlich eine neue Sitzungs-ID für den Client und cleanSessions löscht Sitzungsdaten.
Dieses Modul verwendet ein Sitzungsarray, um alle Sitzungen im System zu speichern, es ist nicht erforderlich, eine neue Sitzungs-ID zu erstellen, sondern liest die Sitzungsdaten direkt und gibt sie zurück, wenn die Sitzungs-ID nicht vorhanden ist Die Sitzungs-ID muss erstellt werden und wird in den Cookies des Clients gespeichert. Der Autor hat eine einfache Sitzungsüberprüfung gestartet, der Code lautet wie folgt:

var start = function(req,res){
	var conn = { res: res, req: req };
	var cookies = {};
	
	if(typeof conn.req.headers.cookie !== "undefined"){
		//session存在时,对session进行解析,获取其中的session id
		conn.req.headers.cookie.split(';').forEach(function(cookie){
			var parts=cookie.split('=');
			cookies[ parts[0].trim() ] = (parts[1] || '').trim();
		});
	}else{
		cookies.SESSID = 0;
	}
	
	var SESSID = cookies.SESSID;
	if(typeof sessions[SESSID] !== "undefined"){   //判断服务器中是否存在该session值
		session=sessions[SESSID];
		if(session.expires <p>Das Obige ist ein einfacher Sitzungsüberprüfungsprozess. Die Hauptidee besteht darin, das Cookie über die Header im Anforderungsobjekt abzurufen und das Cookie zu analysieren, um die Sitzung zu erhalten id, und bestimmen Sie dann, ob der ID-Wert vorhanden ist, wodurch eine neue Sitzung zurückgegeben oder generiert wird. Werfen wir einen Blick auf die Implementierung der Hauptmethode newSession: </p><pre class="brush:php;toolbar:false">function newSession(res){
	var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	var SESSID = '';
	for(var i = 0; i <p>Natürlich besteht der letzte Schritt darin, das gesamte Modul verfügbar zu machen: </p><pre class="brush:php;toolbar:false">exports.start=start;

Anwendung des Session-Moduls

Wir können dies in der Eintragsdatei verlangen (z. B. app.js) und rufen Sie session.start in der Funktion createServer von HTTP auf und speichern Sie das von session.start zurückgegebene Objekt als globales Objekt. Der Code lautet wie folgt:

var app=http.createServer(function(req,res){
	global.sessionLib = session.start(res,req);
});
//调用时
if(!sessionLib['username']){
	sessionLib['username'] = 'mxc';
}

Anwendung des Sitzungs-Plugins. im im Node-Framework-Express

Nach der Einführung des Basismoduls nehmen Sie eines der Projekte des Autors, um die grundlegende Verwendung verwandter Plug-Ins im Framework zu erläutern. Tatsächlich ist das Implementierungsprinzip genau das gleiche wie das, was hier erwähnt wird Artikel.

const cookieSession=require('cookie-session');
(function (){
  var keys=[];
  for(var i=0;i<p>Beurteilen Sie die Verwendung: </p><pre class="brush:php;toolbar:false">  //检查登录状态
  router.use((req, res, next)=>{
    if(!req.session['admin_id'] && req.url!='/login'){ //没有登录且当前不是登录页(避免redirect黑洞)
      res.redirect('/admin/login');
    }else{
      next();
    }
  });

Nach dem Anmelden:

req.session['admin_id']=data[0].ID;

Weitere Programmierkenntnisse finden Sie unter: Programmiervideo! !

Das obige ist der detaillierte Inhalt vonWerfen wir einen Blick auf Cookies und Sitzungen in NodeJS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen