Mire is jó a Session? Itt tárolhatunk el olyan információkat, melyek egy felhasználó egy böngészőjének kérésével kapcsolatos. Ez egy munkafolyamat, vagy Session. Ha ugyanaz a felhasználó mondjuk két böngészőt futtat és ugyanazt az URL-t címzi meg, akkor alkalmazásunkban ez már két különböző munkafolyamat, Session lesz.
A munkafolyamatban célszerűen olyan információkat tárolunk, melyekre a további lépésekhez még szükségünk lesz. Például egy internetes áruházban a felhasználó több terméket válogat össze a „kosárba”. Ezeket a termékeket és a rendelt mennyiségeket tárolnunk kell egészen addig, amíg a tényleges rendelést le nem adja. Mivel áruházunkat többen is látogathatják egy időben, így minden munkafolyamat számára elkülönített területen kell a tárolást elvégezni, hogy a sok-sok „kosár” tartalma ne keveredjen össze. Nyilván nem lenne jó dolog, ha bármilyen külső ok, vagy belső programhiba miatt elveszne a „kosár” tartalma minden felhasználónknál.
A biztonság növelésének érdekében adott egy olyan alkalmazás, mely Windows szervizként fut és képes az ASP.NET-es alkalmazások Session információinak tárolására.
A dolgot egyszerűsíti az a tény, hogy programozás szempontjából semmit nem kell változtatnunk a forráskódunkon: a Session objektum ugyanúgy használható, mint eddig. A különbség a web.config állományban lesz, ahol előírhatjuk a Session kezelésének módját.
Ehhez a sessionState résznél a mode értékét StateServer-re kell megváltoztatnunk. A stateConnectionString-ben előírható, hogy melyik számítógépen található az az alkalmazás, mely elvégzi a Session információk tárolását. Ezt egy IP címmel tehetjük meg. Az alapértelmezett a 127.0.0.1, vagyis a saját gép.
<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
/>
Ahhoz, hogy így működjön is az alkalmazásunk még egy dolgot meg kell tennünk: indítsuk el az ASP.NET State Service nevű Windows szerviz alkalmazást. Ha állandó jelleggel használjuk ezt a módszert, akkor célszerű a szervizt automatikusan indulóra állítani.
A web.config stateConnectionString-jénél találunk egy port számot is, melyen az alkalmazás kommunikál. Ez alapértelmezett értékben 42424. Ha másik portot szeretnénk használni, akkor ezt megváltoztathatjuk a registry-ben a HKEY_LOCAL_MACHINE\ SYSTEM\ CurrentControlSet\ Services\ aspnet_state\ Parameters címen, ahol a Port bejegyzés értékét kell átírni.
Ezek után a Session objektum változatlan módon használható.
Mellékelt példában egy Data01 nevű adatot próbálunk kiolvasni a Session-ból. Ha még nem lett eltárolva - ilyen eset az első kérés alkalmazásunk felé -, akkor hiba keletkezik. Ezt kezelve eltárolhatjuk itt a szükséges értéket, így a következő kéréskor már a Session-ból kap értéket a Label1.
private void Page_Load(object sender, System.EventArgs e)
{
try
{
Label1.Text = Session["Data01"].ToString();
}
catch
{
Session["Data01"] = "Software Online";
Label1.Text = "Store session";
}
Minden munkafolyamat kap egy egyedi azonosítót is automatikusan, hogy az egyes folyamatok között különbséget lehessen tenni. Ha szükségünk van erre az értékre, akkor ezt a SessionID property-n keresztül megkaphatjuk. A munkafolyamat azonosítója egy 120 bites érték, melyet ASCII karaktereket tároló sztringként kaphatunk meg, így aztán akár egy URL-ben is felhasználhatjuk.
Label2.Text = Session.SessionID;
}