Topic: Sessions - AsaMarjew/GameBuddy GitHub Wiki
Auteur: Kiara Broekhuizen
Wat zijn (web)sessies?
Een web sessie is een serie of continu acties bij een bezoeker op een website binnen een bepaald tijdsvak. Dit is een vrij vage uitleg. Om het goed te kunnen uitleggen heb ik een illustratie gevonden die het goed weergeeft.

Op de illustratie zie je dat wanneer de gebruiker inlogt, er 'achter de schermen' een sessie wordt aangemaakt met een sessionID, die vervolgens wordt teruggestuurd naar de bezoeker. Zolang de gebruiker niet uitlogt, worden alle requests naar de server gemaakt met die specifieke sessionID. Zo weet de applicatie wie deze requests maakt omdat het gelinkt is aan de inloggegevens van de bezoeker.
Hoe gebruik je sessies in Express?
Om sessions te gebruiken binnen een Express applicatie, zou je een NPM package moeten installeren, zoals Express-session. Op de website van NPM staat hoe je dit in je project kan gebruiken, hieronder een kort stappenplan:
Installeer package
npm install express-session
require package in app.js
const session = require('express-session')
Roep middleware aan om te kunnen gebruiken
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))
Er zijn meerdere verschillende properties die je kunt toepassen maar die zal ik hier niet behandelen.
Cookies
Je ziet in de code hierboven dat er gebruik gemaakt wordt van een cookie, alleen wat houdt dit precies in? Een cookie is een klein stukje informatie van een website dat is opgeslagen in de browser om de website te helpen met het tracken van de bezoeker's activiteit. Het verschil tussen een session en een cookie is dat sessionID uniek zijn elke keer een gebruiker een website bezoekt, waar een cookie uniek is aan een bepaalde bezoeker.
Hoe hebben wij sessies toegepast?
Wij hebben sessions gebruikt voor een login authenticatie systeem. Wanneer een gebruiker inlogt, wordt er een sessionID aan gelinkt en dit zorgt ervoor dat de gebruiker meer functionaliteiten kan gebruiken binnen onze applicatie.
//login with session (deze code heb ik van Anna Boomsma's github - link onderin)
app.post('/inloggen', (req, res) => {
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true,
});
client.connect((err, db) => {
let gebruikers = db.db('TechTeam').collection('gebruikers');
const email = req.body.emailInloggen;
const password = req.body.wachtwoordInloggen;
if (email && password) {
gebruikers.findOne(
{
email: email,
wachtwoord: password,
},
(err, data) => {
if (err) {
next(err);
} else {
req.session.userId = data; // koppelen van data aan sessionID
res.redirect('/dashboard');
}
}
);
}
});
});
Routing
Wanneer een gebruiker is ingelogt, wordt die doorgestuurd naar het dashboard, waar alle gegevens van die persoon staan. Dit wordt gedaan met req.session
//render dashboard
app.get('/dashboard', (req, res) => {
const client = new MongoClient(uri, {
useUnifiedTopology: true,
useNewUrlParser: true,
});
let { userId } = req.session;
if (!userId) {
res.redirect('inloggen');
} else {
client.connect((err, db) => {
if (err) throw err;
db.db('TechTeam')
.collection('gebruikers')
.findOne({ naam: req.session.naam })
.then(() => {
res.render('dashboard', { gebruikersLijst: req.session.userId });
console.log(req.session.userId);
db.close();
});
});
}
});
Destroy session
Je kan een sessie 'vernietigen', of ook wel, de gebruiker uitloggen. Dit doe je met req.session.destroy
Bronnen
Hazelcast. (2019, 2 oktober). How Do Web Sessions Work? Geraadpleegd op 15 juni 2021, van https://hazelcast.com/glossary/web-session/
Boomsma, A. (z.d.). Annaboomsma/datingAppFeature. Geraadpleegd op 15 juni 2021, van https://github.com/annaboomsma/datingAppFeature/blob/master/server.js