Tak dneska si řekneme něco o session a cookies.
Session
Session slouží k dočasnému ukládání dat o uživateli nebo o stavu aplikace. Například máte na stránkách volbu barvy pozadí. Uživatel si vybere nějakou barvu a klikne na OK. Barva se mu změní, ale jakmile uživatel klikne na další odkaz, barva se mu nastaví na přednastavenou, protože server neví, jestli se jedná pořád o toho samého uživatele, nebo jestli to není někdo jiný. A právě k tomu slouží session.
Přidávání hodnot do session
Novou hodnotu můžete do session načíst pomocí metody Add:
C# i VB (samozřejmě bez středníku)
Session.Add(nazev_hodnoty,hodnota);
Anebo to můžete zadat takto:
C#
Session[nazev_hodnoty] = hodnota;
VB
Session(nazev_hodnoty) = hodnota
Pokud budeme později chtít zavolat session s danou hodnotou, uděláme to takhle:
C#
Session[nazev_hodnoty];
U VB.NET to bude stejně, akorát místo hranatých závorek budou kulaté a nebude tam středník.
Onen příklad s barvou:
C#
<!-- stranka1.aspx -->
<%@ Page Language="C#" %>
<script runat="server">
string[] seznamBarev = {"Modrá","Žlutá","Zelená","Oranžová","Červená"}; //nastavime obsah seznamu barev do pole
string barvaKod = ""; // vytvorime promennou do ktere budeme ukladat kod barev
void Page_Load(){
if(!IsPostBack){ //pokud je stranka načtena poprvé
dlBarva.DataSource = seznamBarev; // tak do seznamu dlBarva volžíme obsah pole seznamBarev
dlBarva.DataBind(); // a aktualizujeme seznam
}
}
void ulozitBarvu(object sender,EventArgs e){
barvaKod = "";
switch(dlBarva.SelectedIndex){ // zjistime kterou polozku si uzivatel vybral
case 0 : barvaKod = "4448B7"; break; // a podle toho nacteme do promenne barvaKod kód barvy..
case 1 : barvaKod = "D7CF52"; break;
case 2 : barvaKod = "4A842B"; break;
case 3 : barvaKod = "F49D22"; break;
case 4 : barvaKod = "EA2824"; break;
}
Session.Add("bPozadi",barvaKod); // a pote ulozime kod barva do Session bPozadi
}
</script>
<html>
<head>
</head>
<body bgcolor='#<% Response.Write(Session["bPozadi"]); %>'> <!-- Do pozadi vypiseme Session bPozadi -->
<form runat="server">
<asp:DropDownList id="dlBarva" runat="server">
<asp:Button id="btnOdeslat" onClick="ulozitBarvu" runat="server" text="ok"></asp:Button>
</form>
<a href="stranka2.aspx">stranka 2</a>
</body>
</html>
<!—stranka2.aspx -->
<%@ Page Language="C#" %>
<script runat="server">
object pozadi; // vytvorime promennou typu object
void Page_Load(){
if(Session["bPozadi"] != null){ // pokud Session bPozedi neni prazdna
pozadi = Session["bPozadi"]; // tak vlozime do promenne pozadi obsah Session bPozadi
}
else{ // jinak..
pozadi = "FFFFFF"; // nastavime pozadi na bilou barvu..
}
}
</script>
<html>
<body bgcolor='#<% Response.Write(pozadi); %>'> <!-- Do pozadi vypiseme promennou pozadi -->
Stránka 2.. <br>
<a href="stranka1.aspx">Stranka 1</a>
</body>
</html>
VB
<!-- stranka1.aspx -->
<%@ Page Language="VB" %>
<script runat="server">
Dim seznamBarev As String() = {"Modrá","Žlutá","Zelená","Oranžová","Červená"} 'nastavime obsah seznamu barev do pole
Dim barvaKod As String = "" ' vytvorime promennou do ktere budeme ukladat kod barev
Sub Page_Load
If IsPostBack = False Then 'pokud je stranka načtena poprvé
dlBarva.DataSource = seznamBarev ' tak do seznamu dlBarva volžíme obsah pole seznamBarev
dlBarva.DataBind() ' a aktualizujeme seznam
End If
End Sub
Sub ulozitBarvu(sender As object,e As EventArgs)
barvaKod = ""
Select dlBarva.SelectedIndex ' zjistime kterou polozku si uzivatel vybral
case 0
barvaKod = "4448B7" ' a podle toho nacteme do promenne barvaKod kód barvy..
case 1
barvaKod = "D7CF52"
case 2
barvaKod = "4A842B"
case 3
barvaKod = "F49D22"
case 4
barvaKod = "EA2824"
End Select
Session.Add("bPozadi",barvaKod) ' a pote ulozime kod barva do Session bPozadi
End Sub
</script>
<html>
<head>
</head>
<body bgcolor='#<% Response.Write(Session("bPozadi")) %>'><!-- Do pozadi vypiseme Session bPozadi -->
<form runat="server">
<asp:DropDownList id="dlBarva" runat="server"></asp:DropDownList>
<asp:Button id="btnOdeslat" onclick="ulozitBarvu" runat="server" text="ok"></asp:Button>
</form>
<a href="stranka2.aspx">stranka 2</a>
</body>
</html>
<!-- stranka2.aspx -->
<%@ Page Language="VB" %>
<script runat="server">
Dim pozadi As Object ' vytvorime promennou typu object
Sub Page_Load
if Session("bPozadi") <> Nothing Then ' pokud Session bPozedi neni prazdna
pozadi = Session("bPozadi") ' tak vlozime do promenne pozadi obsah Session bPozadi
Else ' jinak..
pozadi = "FFFFFF" ' nastavime pozadi na bilou barvu..
End If
End Sub
</script>
<html>
<head>
</head>
<body bgcolor='#<% Response.Write(pozadi) %>'> <!-- Do pozadi vypiseme promennou pozadi -->
Stránka 2.. <br>
<a href="stranka1.aspx">Stranka 1</a>
</body>
</html>
Když si nyní vybereme některou barvu, dáme OK a klikneme na odkaz, další stránka bude mít stejnou barvu jako ta předešlá. Ovšem když zavřeme prohlížeč a potom opět najedeme na naši stránku, barva pozadí bude opět původní a barva na další stránce bude bílá. To je z toho důvodu, že stránky ztratí kontakt se serverem, session se vymaže. Pokud bychom chtěli, aby se informace uchovaly, musíme k tomu použít cookies.
Cookies
Cookies jsou malé soubory, které jsou uloženy na uživatelově pevném disku a do kterých můžeme ukládat potřebné informace. Pozor si musíme dávat na to, že uživatel může mít ve svém prohlížeči používání cookies zakázáno, a v tom případě mu naše aplikace fungovat nebude.
Vytvoření cookies
C#
Response.Cookies[nazev_hodnoty].Value = hodnota;
Ve VB.NET je to stejné, s tím rozdílem, že hranaté závorky jsou nahrazeny kulatými a odděláme středník.
Pokud budeme chtít cookies později zavolat, uděláme to takhle:
C#
Response.Write(Request.Cookies[„nazev_hodnoty“].Value);
U VB.NET je to stejné, opět s tím rozdílem, že hranaté závorky jsou nahrazeny kulatými a odděláme středník.
Doba trvání
Cookies jsou v uživatelově počítači uloženy pouze dočasně, po uplynutí nějaké doby jsou z něj automaticky smazány. Dobu pobytí v počítači určuje nastavení vlastnosti expired, která je typu DateTime.
C#
DateTime dobaPlatnosti = new DateTime.Now;
dobaPlatnosti.AddDays(5);
Response.Cookies[„nazev_hodnoty“].Expired = dobaPlatnosti;
VB
Dim dobaPlatnosti As DateTime = new DateTime.Now
dobaPlatnosti.AddDays(5)
Response.Cookies(„nazev_hodnoty“).Expired = dobaPlatnosti
Nyní jsme cookie s názvem nazev_hodnoty
nastavili dobu platnosti dní.
Ukládání více hodnot
Pokud chceme do jednoho „koláčku“ uložit více hodnot, zaměníme pouze slovo .Value za .Values:
C#
Response.Cookies[„stranka“].Values[„url“] = „www.programujte.com“;
Response.Cookies[„stranka“].Values[„zakladatel“] = „Curo“;
Ve VB.NET je to opět stejné, až na známé výjimky.
A to je pro dnešek vše. Ještě si můžete zkusit jen tak pro sebe vytvořit náš příklad s barvami pozadí s pomocí cookies.