När din webbapplikation behöver "komma ihåg" användare, använder den vanligtvis någon av två mekanismer: cookies eller sessioner. En cookie är ett litet lagringsområde i webbläsaren där du kan lagra användarrelaterad data som till exempel sökinställningar. Sessioner låter dig lagra känslig information på servern istället.
Upptäck hur du ställer in sessioner på en Express-server som drivs av Node.js.
Vad du behöver
För att följa den här handledningen behöver du både Node.js och npm installerade. En ny version av Node.js borde följa med npm, en pakethanterare för att installera beroenden.
Du kommer att använda npm för att installera Express och express-session. Det här är verktygen du kommer att använda för att skapa webbservern och sessionen.
Vad är en session i Node.js?
En cookie är en liten fil som din webbläsare använder för att lagra data. Du kan använda cookies för att lagra okänslig data som sökinställningar.
Du bör inte lagra känslig information (som användarnamn och lösenord) i cookies. När din webbläsare skickar cookies över HTTP är de sårbara för hackare som kanske kan fånga upp dem. De lagras också i vanlig text på din dator, så hackare kan potentiellt inspektera dem och stjäla din data.
Istället för att spara känslig data som en cookie på klienten bör du lagra den på servern. Detta håller den skyddad från omvärlden.
Sessioner låter dig lagra känslig data som din app behöver för att identifiera användaren. Exempel är användarnamn, lösenord och e-post. De är säkrare eftersom de bor på servern, inte klienten.
Varje gång du har data som du vill ska finnas kvar över förfrågningar, spara dem på serversidan med en session. Du kommer att lära dig hur du skapar en session i följande avsnitt.
Skapa en session i en Express-server
Express är ett populärt webbramverk för Node.js. Den låter dig ställa in en webbserverapplikation som lyssnar på klientförfrågningar vid ditt valda portnummer. Du kan skapa API-rutter, tillämpa mellanprogram och till och med ansluta applikationen till en databas, allt tack vare API: erna som tillhandahålls av ramverket.
1. Skapa ett Node.js-projekt
Skapa en helt ny mapp för ditt projekt och starta sedan ditt kommandoradsverktyg och cd i den mappen.
Kör sedan följande kommando för att initiera ett Node.js-projekt:
npm init -y
Detta genererar en package.json-fil i projektets rotmapp med standardinställningen. Filen package.json för körning npm-skript.
2. Installera Express och express-session
Du använder Express för att skapa webbserverapplikationen. Och express-session för att skapa sessioner på den serverapplikationen.
Kör följande kommando på terminalen för att installera båda beroenden:
npm i express express-session
Efter att ha installerat båda paketen skulle nästa steg vara att skapa servern.
3. Skapa sessioner i appen
Skapa en fil med namnet App.js i ditt projekts rotmapp och importera beroenden:
konst uttrycka = behöva('uttrycka')
konst session = behöva('express-session')
app = express()
Därefter registrerar du sessionsmellanvaran. Passera in ett föremål med hemlighet egenskap (för att signera sessions-ID-cookien) och cookien.
app.use(
session({
hemlighet: "någon hemlighet",
cookie: { maxAge: 30000 },
saveUninitialized: falsk,
})
);
Här ställer du in den högsta åldern för passet till 30 sekunder (30000 millisekunder). Att ställa in saveUnitialized till false är viktigt om du har ett inloggningssystem. Om du inte gör det kommer din server att generera ett nytt sessions-ID varje gång användaren skickar en förfrågan.
Skapa sedan en inloggningsväg för att ändra sessionen. När en användare når den här vägen förväntar du dig att klienten skickar användarnamnet och lösenordet i förfrågan. Först kommer du åt dessa värden och kontrollerar om de finns (och om användaren har autentiserats):
app.post("/logga in", (req, res) => {
konst { användarnamn, lösenord } = req.body;
om (användarnamn Lösenord) {
om (req.session.authenticated) {
res.json (session);
} annan {
om (Lösenord "123") {
req.session.authenticated = Sann;
req.session.user = { användarnamn };
res.json (req.session);
} annan {
res.status(403).json({ medd: "Dåliga referenser" });
}
}
} annan {
res.status(403).json({ medd: "Dåliga referenser" });
}
});
Med den första if-satsen utför du en dummy-kontroll. Denna kontroll är för att säkerställa att du bara fortsätter om användarnamnet och lösenordet finns.
Därefter kontrollerar du om användaren redan är autentiserad. Om så är fallet, skicka tillbaka sessionen till klienten. Om inte, ställ in den autentiserade egenskapen till true och spara användarnamnet i sessionen. Skicka sedan tillbaka det till klienten.
Med ovanstående kod kommer servern ihåg varje användare som skickar en begäran till servern. Detta beror på att de har autentiserats och fått sina unika detaljer (användarnamn och lösenord) sparade i sessionen.
Starta din server genom att lägga till följande kod längst ner på App.js:
app.lyssna(3000, () => {
trösta.logga("Server körs på port 3000");
});
För att testa denna rutt, använd en API-klient för att skicka en begäran till inloggningsrutten du skapade. Se till att skicka användarnamnet och lösenordet i förfrågans brödtext. Så här skulle din API-begäran se ut om du använder Rest Client:
LÄGGA IN http://localhost: 3000/login HTTP/1.1
Innehållstyp: "applikation/json"
{ Användarnamn: "Kingsley", Lösenord: "123"}
Om allt går bra får du följande objekt:
{
"kaka": {
"originalMaxAge": 30000,
"bara http": Sann,
"väg": "/"
},
"autenticerad": Sann,
"användare": {
"Användarnamn": "Kingsley",
"Lösenord": "123"
}
}
Med den här koden har två saker hänt. Först har du autentiserats på servern. För det andra har sessionen nu dina inloggningsuppgifter, så att servern nu vet vem du är. Varje gång du skickar en ny begäran kommer den att komma ihåg dig tills sessionen går ut och servern tar bort den.
Sessioner förbättrar användarupplevelsen
Sessioner är en viktig del av Node.js-applikationer. Detta beror på att de tillåter dig att upprätthålla ett tillstånd av interaktion över många förfrågningar och svar. Sessioner är särskilt viktiga för applikationer som kräver att du loggar in.
Använd sessioner i din backend-applikation för att hålla reda på användarspecifik data. Ett exempel på sådan data är de varor som din användare har lagt till i en kundvagn.
Utan sessioner måste du ha ett separat datalager för varje användare i din applikation. Detta skulle vara ineffektivt och öka komplexiteten i applikationen.
Express.js förenklar sessioner, routing och mer
Express.js är det mest populära webbramverket för Node.js som används för närvarande. Det tillhandahåller många verktyg och bibliotek för att skapa backend-applikationer, och express-sessionsbiblioteket är bara ett av dem.
Om du vill använda Node.js för backend webbutveckling, kolla in Express.