Cookies de sesión en Node.js

Protocolo HTTP : es la columna vertebral de Internet, cada solicitud del cliente, en particular, contiene varios encabezados HTTP y contiene toda la información de la solicitud. Este protocolo es la base del intercambio de datos a través de Internet, pero el protocolo HTTP es el protocolo sin estado, lo que significa que este protocolo no puede mantener las requests anteriores del cliente en particular al servidor. Significa que tenemos que dar una y otra vez requests autorizadas para avanzar a la página siguiente de la página particular de una aplicación web y luego cómo superar este problema. La respuesta son las cookies y las sesiones. Las cookies y las sesiones hacen que el protocolo HTTP sea un protocolo con estado. 

Cookies de sesión: Las cookies de sesión son las cookies temporales que se generan principalmente en el lado del servidor. El uso principal de estas cookies es para rastrear toda la información de solicitud que ha realizado el cliente en general en una sesión particular. La sesión se almacena por un tiempo temporal cuando el usuario cierra la sesión del navegador automáticamente lo destruye. En este artículo, utilizaremos almacenamiento de archivos externo para almacenar cookies de sesión. Ejemplo de cookies de sesión El ejemplo más común de cookies de sesión es un sitio web de comercio electrónico. Todo sitio web de comercio electrónico inicia una sesión cuando un nuevo usuario inicia el sitio web de comercio electrónico en particular. Cuando se crea una sesión después de una autorización exitosa, se crea una identificación de sesión única en el lado del cliente en forma de cookie.

Instalación de módulos:

  • express.js : marco Express.js utilizado para manejar múltiples requests.
npm install express
  • analizador de cookies: el módulo analizador de cookies utilizado para analizar las cookies entrantes.
npm install cookie-parser
  • express-session : este módulo de sesión expresa utilizado para la gestión de sesiones en NodeJS.
npm install express-session
  • session-file-store: este módulo ayuda a crear un nuevo almacén de archivos para la nueva sesión.
npm session-file-store

Estructura del proyecto: la estructura de nuestro proyecto se verá así:

Nombre de archivo: index.js

Javascript

// Importing express module
const express = require("express")
  
// Importing express-session module
const session = require("express-session")
  
// Importing file-store module
const filestore = require("session-file-store")(session)
  
const path = require("path")
  
// Setting up the server
var app = express()
  
// Creating session 
app.use(session({
    name: "session-id",
    secret: "GFGEnter", // Secret key,
    saveUninitialized: false,
    resave: false,
    store: new filestore()
}))
  
// Asking for the authorization
function auth(req, res, next) {
    // Checking for the session
    console.log(req.session)
  
    // Checking for the authorization
    if (!req.session.user) {
        var authHeader = req.headers.authorization;
        console.log(authHeader);
        var err = new Error("You are not authenticated")
        res.setHeader("WWW-Authenticate", "Basic")
        err.status = 401
        next(err)
  
        var auth = new Buffer.from(authHeader.split(' ')[1],
            "base64").toString().split(":")
  
        // Reading username and password
        var username = auth[0]
        var password = auth[1]
        if (username == "admin2" && password == "password") {
            req.session.user = "admin2"
            next()
        }
        else {
            // Retry incase of incorrect credentials
            var err = new Error('You are not authenticated!');
            res.setHeader("WWW-Authenticate", "Basic")
            err.status = 401;
            return next(err);
        }
    }
    else {
        if (req.session.user === "admin2") {
            next()
        }
        else {
            var err = new Error('You are not authenticated!');
            res.setHeader("WWW-Authenticate", "Basic")
            err.status = 401;
            return next(err);
        }
    }
}
  
// Middlewares
app.use(auth)
app.use(express.static(path.join(__dirname, 'public')));
  
// Server setup
app.listen(3000, () => {
    console.log("Server is Starting")
})

Ejecute el archivo index.js usando el siguiente comando:

node index.js
  • Abra cualquier navegador con la ubicación http://localhost:3000 en una ventana privada (para evitar una contraseña y un nombre de usuario guardados). Se producirá un pop cerca de la barra de direcciones. Complete el nombre de usuario y la contraseña que se mencionan en el código como se muestra a continuación:

  • Si el nombre de usuario y la contraseña ingresados ​​coinciden con la ubicación mencionada, index.html se mostrará en el navegador.

Explicación:

  • Cuando escribimos Ejecutar el archivo index.js usando el comando node index.js, encontraremos una respuesta que se da a continuación para el nuevo usuario:

  • Después de completar la contraseña y el nombre de usuario coincidentes, se genera una nueva sesión en el directorio que realiza un seguimiento de todas las requests exitosas realizadas por el cliente.

  • Este archivo de sesión contiene todos los registros de la sesión, es decir, información del cliente en particular cuando el cliente realizó la primera solicitud y muchos más, como se muestra a continuación:
{"cookie":{"originalMaxAge":null,
  "expires":null,"httpOnly":true,"path":"/"},
"user":"admin","__lastAccess":1610430510130}
  • La respuesta del servidor al cliente para configurar una cookie para esta sesión en particular. Entonces, cuando un cliente realiza otra solicitud al servidor. El encabezado de la solicitud contiene una cookie que contiene una identificación de sesión que ya se creó en el lado del servidor. Los encabezados de solicitud tendrán el siguiente aspecto:

  • Después de hacer coincidir con éxito tanto el identificador de sesión de la cookie como el servidor de identificador de sesión del almacén de archivos, se omite la autorización en el código anterior y se muestra el archivo index.html al usuario. A continuación se muestra la identificación de la sesión coincidente con éxito:

Publicación traducida automáticamente

Artículo escrito por zack_aayush y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *