TOC

This article has been localized into Hungarian by the community.

HttpContext:

Sütik

A HTTP protokollt, ami a weben a szerver és kliens közti kommunikációt kezeli, állapot nélküli protokollként tartják számon. Más szavakkal, ha a felhasználó két oldalt kér egy szerverről, akkor a két kérés között nem történik információcsere. Ehelyett a fejlesztőnek úgynevezett sütikre kell hagyatkozni (vagy munkamenetekre - erről később még szó lesz) a kérések közti információmegosztásra. Sok helyzetben ez hasznos tud lenni, például a felhasználó bejelentkezve tartására.

Szinte minden szerveroldali technológiának van beépített funkcionalitása a sütik kezelésére, és az ASP.NET MVC sem kivétel. Voltaképpen a sütikkel való munka könnyen elvégezhető, ismét a HttpContext osztályon keresztül. Ebben a cikkben megtanulhatod, hogyan kell sütit készíteni, majd a benne lévő információt beolvasni, ezáltal felhasználhatod egy bizonyos látogatóról szóló információt a különböző kérései közt.

Mi az a süti?

A süti lényegében egy fizikai, egyszerű, szöveges fájl amit a kliens (többnyire böngésző) tárol, és egy bizonyos weboldalhoz kötődik. A kliens engedélyt ad ennek az oldalnak, hogy olvassa a fájlban tárolt információt minden későbbi kérés során. Ez voltaképpen lehetővé teszi a szervernek (vagy akár magának a kliensnek is) hogy információt tároljon későbbi használatra.

Sütik írása és olvasása

Egy süti beállítása, majd későbbi beolvasása, nagyon is könnyű ASP.NET MVC-ben. Itt van, hogyan tudsz sütit küldeni a kliensnek, a legalapvetőbb formában:

HttpContext.Response.Cookies.Append("user_id", "1");

A HttpContext osztály Response tulajdonságát használom, amin keresztül elérem a Cookies tulajdonságot. Az Append() metódus segítségével a kimenethez egy sütit fűzhetek, egy név és érték megadásával. A nevet (user_id) fogjuk később az érték (1) visszaszerzésére használjuk majd. Ez pedig ugyanolyan egyszerű:

var userId = HttpContext.Request.Cookies["user_id"];

Az érték beolvasásakor közvetlen a Request tulajdonságot használom a Response helyett - ennek az az oka, hogy a süti írása azáltal történik, hogy információt adunk a kliensnek visszaküldött válaszban, a responseban; az olvasás viszont a kliens által leadott kérésen, a requesten, keresztül történik (egy átlagos böngésző automatikusan elküldi a releváns sütiket minden kéréssel).

Most hogy tudod, hogyan kell írni és olvasni a sütiben található információkat, kombináljuk ezeket egy egyszerű példában, ahol hozzáadunk egy sütihez még jelen nem lévő információt - ezzel könnyen megállapíthatjuk, hogy a felhasználó felkereste-e már az aktuális oldalt, vagy sem:

public class CookiesController : Controller
{
    public IActionResult Index()
    {
if(!HttpContext.Request.Cookies.ContainsKey("first_request"))
{
    HttpContext.Response.Cookies.Append("first_request", DateTime.Now.ToString());
    return Content("Welcome, new visitor!");
}
else
{
    DateTime firstRequest = DateTime.Parse(HttpContext.Request.Cookies["first_request"]);
    return Content("Welcome back, user! You first visited us on: " + firstRequest.ToString());
}
    }
}

A vezérlőakciónk most már annak megfelelő választ generál, hogy a látogató volt-e már ezen az oldalon. Ellenőrzi, hogy létezik egy "first_request" nevű süti - ha nem, akkor készítünk egyet, majd beállítjuk a jelenlegi dátum és idő értékét. Ha van ilyen süti, akkor feltételezhetjük, hogy a látogató már látta ezt az oldalt, és megjeleníthetjük az első látogatás időpontját.

Röviden ennyiről szólnak a sütik, és most már tudod, hogyan kell írni és olvasni őket. Ennél persze sokkal többet kell tudnod a sütik teljes körű kiaknázásához.

CookieOptions

Az előbb használt Append() metódus opcionális harmadik paramétere a CookieOptions osztály egy példányát fogadja el. Ezzel a süti több fontos tulajdonságát tudod megadni, például hogy mekkora legyen az élettartama, vagy a tartománya és útvonala. A legfontosabb tulajdonságait átvesszük alább, de először bizonyosodj meg róla, hogy használod a Microsoft.AspNetCore.Http névtartományt, ahol a CookieOptions osztály található:

using Microsoft.AspNetCore.Http;

Így most már készíthetsz egy CookieOptions példányt, ami az alapértelmezett beállításokat fogja használni, majd ezt az Append() metódusnak adhatod:

CookieOptions cookieOptions = new CookieOptions();            
HttpContext.Response.Cookies.Append("first_request", DateTime.Now.ToString(), cookieOptions);

Mielőtt átadnád (tehát a két sor kód között), alighanem meg akarod változtatni a beállításokat. Itt vannak a legfontosabbak:

CookieOptions.Expires

Alapértelmezetten a sütid úgynevezett munkamenet süti lesz, ami addig marad életben, amíg a böngésző nyitva van - amint azt bezárják, a süti törlésre kerül. Ezt azonban szabadon átállíthatod a Expires tulajdonsággal. Ez a tulajdonság egy DateTimeOffset példány, ami könnyen állíthatóvá teszi a lejárati időt:

cookieOptions.Expires = new DateTimeOffset(DateTime.Now.AddDays(7));

Ezzel a süti hét napon belül lejár. A lejáratot pontosan beállíthatod különböző metódusok segítségével, például AddDays(), AddHours(), stb.

CookieOptions.Domain

Alapjáraton a süti arra a doménre érvényes, ahonnan a kérés érkezett. Ha az oldalad például a mywebsite.com doménről érhető el, akkor a süti a mywebsite.com-ra lesz beállítva. Ha az oldal viszont egy aldoménen keresztül érhető el, akkor ez az aldomén lesz használva, ez pedig fontos, mivel az aldomén lehet akár "www" is. Tehát ha az oldalt a www.mywebsite.com-on keresztül lehet elérni, akkor a süti alapértelmezetten csak www.mywebsite.com-ra lesz érvényes, mywebsite.com-ra NEM. Ezért jó gyakorlat a Domain tulajdonságot a weblapod alap doménjére állítani, elé pedig pontot tenni, így:

cookieOptions.Domain = ".mywebsite.com";

Így már a süti elérhető a mywebsite.com doménről és minden esetleges aldoménről is. Ellenben ha nincs teljes irányításod a teljes domén felett, akkor alighanem korlátoznod kell a süti doménjét azokra a (al)doménekre, amelyek hozzád tartoznak.

CookieOptions.Path

Alapértlemezetten a süti Path (útvonal) tulajdonsága "/"-re lesz állítva, ami azt jelenti, hogy a süti a weboldal minden egyes oldalára érvényes lesz. Bizonyos helyzetekben viszont szükséged lehet egy olyan sütire, ami csak bizonyos oldalon vagy könyvtárban érvényes. Erre szolgál a Path tulajdonság:

cookieOptions.Path = "/users/";

A süti ezáltal csak a "users" könyvtárban és annak alkönyvtáraiban látható és használható.

A CookieOptions további tulajdonságai

Sok más érdekes tulajdonság is található a CookieOptions osztályban, például az IsEssential, az HttpOnly és a Secure. Ha többet szeretnél róluk tudni, akkor javaslom tekintsd meg a CookieOptions dokumentációt..

Összefoglalás

A sütiknek köszönhetően információt tárolhatunk a látogatókról, amit későbbi kérések során aztán felhasználhatunk. Ez egy fontos technika, és rengeteg szituációban használhatóak, például a felhasználó bejelentkezve tartására, a weboldal használatának naplózására, és még sok másra is.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!