Sessiya
HTTP sessiyalar foydalanuvchi haqidagi ma'lumotni bir nechta so'rovlar davomida saqlash imkonini beradi, bu ayniqsa MVC ilovalarida foydalidir.
HTTP sessiyalar foydalanuvchi haqidagi ma'lumotni bir nechta so'rovlar davomida saqlash imkonini beradi, bu ayniqsa MVC ilovalarida foydalidir.
Express bilan foydalanish (default)
Avval kerakli paketni o'rnating (TypeScript foydalanuvchilari uchun tiplari bilan):
1$ npm i express-session
2$ npm i -D @types/express-sessionO'rnatish tugagach, express-session middleware ini global middleware sifatida qo'llang (masalan, main.ts faylida).
1import * as session from 'express-session';
2// somewhere in your initialization file
3app.use(
4 session({
5 secret: 'my-secret',
6 resave: false,
7 saveUninitialized: false,
8 }),
9);Default server-tomon sessiya saqlash mexanizmi ataylab production muhiti uchun mo'ljallanmagan. U ko'p hollarda xotira oqishini keltirib chiqaradi, bitta jarayondan ortiq masshtablanmaydi va debugging hamda ishlab chiqish uchun mo'ljallangan. Batafsil rasmiy repozitoriyda o'qing.
secret sessiya ID cookie sini imzolash uchun ishlatiladi. Bu bitta secret uchun string yoki bir nechta secretlardan iborat massiv bo'lishi mumkin. Agar secretlar massivi berilsa, sessiya ID cookie sini imzolash uchun faqat birinchi element ishlatiladi, ammo so'rovlardagi imzoni tekshirishda barcha elementlar hisobga olinadi. Secretning o'zi odam tomonidan oson taxmin qilinmaydigan bo'lishi kerak va eng yaxshisi tasodifiy belgilar to'plami bo'ladi.
resave opsiyasini yoqish sessiyani, hatto so'rov davomida umuman o'zgartirilmagan bo'lsa ham, sessiya omboriga qayta saqlashni majbur qiladi. Default qiymati true, ammo defaultdan foydalanish eskirgan, chunki default qiymat kelajakda o'zgaradi.
Xuddi shuningdek, saveUninitialized opsiyasini yoqish "uninitialized" bo'lgan sessiyani omborga saqlashni majbur qiladi. Sessiya yangi, lekin o'zgartirilmagan bo'lsa, u uninitialized hisoblanadi. false ni tanlash login sessiyalarini implementatsiya qilishda, server saqlashdan foydalanishni kamaytirishda, yoki cookie o'rnatishdan oldin ruxsat talab qiladigan qonunlarga rioya qilishda foydali. false ni tanlash, shuningdek, klient sessiyasiz holda bir vaqtning o'zida bir nechta parallel so'rov yuboradigan holatlardagi race conditionlarni kamaytiradi (manba).
session middleware ga yana bir qancha opsiyalarni uzatishingiz mumkin, ular haqida batafsil API hujjatlarida o'qing.
E'tibor bering, secure: true tavsiya etiladigan opsiya. Ammo u https yoqilgan saytni talab qiladi, ya'ni secure cookie uchun HTTPS zarur. Agar secure yoqilgan bo'lsa va siz saytga HTTP orqali kirayotgan bo'lsangiz, cookie o'rnatilmaydi. Agar node.js serveringiz proksi ortida bo'lsa va secure: true dan foydalanayotgan bo'lsangiz, express da "trust proxy" ni o'rnatishingiz kerak.
Shu bilan, endi route handlerlar ichida sessiya qiymatlarini o'rnatish va o'qish mumkin, quyidagicha:
1@Get()
2findAll(@Req() request: Request) {
3 request.session.visits = request.session.visits ? request.session.visits + 1 : 1;
4}@Req() dekoratori @nestjs/common dan, Request esa express paketidan import qilinadi.
Muqobil ravishda, @Session() dekoratoridan foydalanib so'rovdan sessiya obyektini ajratib olishingiz mumkin:
1@Get()
2findAll(@Session() session: Record<string, any>) {
3 session.visits = session.visits ? session.visits + 1 : 1;
4}@Session() dekoratori @nestjs/common paketidan import qilinadi.
Fastify bilan foydalanish
Avval kerakli paketni o'rnating:
1$ npm i @fastify/secure-sessionO'rnatish tugagach, fastify-secure-session plaginini ro'yxatdan o'tkazing:
1import secureSession from '@fastify/secure-session';
2
3// somewhere in your initialization file
4const app = await NestFactory.create<NestFastifyApplication>(
5 AppModule,
6 new FastifyAdapter(),
7);
8await app.register(secureSession, {
9 secret: 'averylogphrasebiggerthanthirtytwochars',
10 salt: 'mq9hDxBVDbspDR6n',
11});Kalitni oldindan generatsiya qilishingiz (ko'rsatmalarni ko'ring) yoki kalitlarni aylantirishdan foydalanishingiz ham mumkin.
Mavjud opsiyalar haqida batafsil rasmiy repozitoriyda o'qing.
Shu bilan, endi route handlerlar ichida sessiya qiymatlarini o'rnatish va o'qish mumkin, quyidagicha:
1@Get()
2findAll(@Req() request: FastifyRequest) {
3 const visits = request.session.get('visits');
4 request.session.set('visits', visits ? visits + 1 : 1);
5}Muqobil ravishda, @Session() dekoratoridan foydalanib so'rovdan sessiya obyektini ajratib olishingiz mumkin:
1@Get()
2findAll(@Session() session: secureSession.Session) {
3 const visits = session.get('visits');
4 session.set('visits', visits ? visits + 1 : 1);
5}@Session() dekoratori @nestjs/common dan, secureSession.Session esa @fastify/secure-session paketidan import qilinadi (import bayonoti: import * as secureSession from '@fastify/secure-session').