Homepage-Webhilfe Event-Banner

Ansichtszustand, Session und Cookies

Daten-Icon Immer wieder werden Sie in die Situation kommen, dass Sie Daten des aktuellen Besuchers speichern möchten. Diese Daten sollen dann z. B. nur für diese Seite, nur für diese Sitzung oder sogar länger gelten. Wichtig dabei ist jedoch immer, dass die Daten eben nur für diesen einen bestimmten Besucher gelten. In PHP haben Sie dafür Sessions und Cookies kennengelernt. Diese gibt es auch in ASP.NET. Zudem bietet uns ASP.NET die Möglichkeit, Daten im sogenannten Ansichtszustand zu speichern. In diesem Thema wollen wir Ihnen die verschiedenen Speicherungsmöglichkeiten erklären und mit einem Beispiel verdeutlichen.


Mit dem Ansichtszustand (engl. view state) ist es möglich, Daten auf der Seite zu speichern. Diese Methode wird unter anderem auch dazu verwendet, die Werte und Ereignisstatusse von Steuerelementen nach einem Postback beizubehalten. Diese Speicherung geschieht jedoch bereits automatisch. Die Daten des Ansichtszustands werden in versteckten Eingabefeldern gespeichert und mit BASE-64 enkodiert. Diese Zeichenkette kann ohne viel Aufwand dekodiert, manipuliert und wieder zurück enkodiert werden. Speichern Sie hier also niemals sicherheitsrelevante Daten. Im Ansichtszustand können Daten innerhalb von Variablen gespeichert werden. Um auf diese Variablen zuzugreifen, können wir die Eigenschaft ViewState (des aktuellen Page-Objekts) nutzen. Der lesende Zugriff erfolgt mittels den eckigen Klammern [] (wie bei Arrays). Existiert eine Variable nicht, wird null zurückgegeben. Dieser Syntax kann natürlich auch verwendet werden, wenn ein Wert überschrieben werden soll. Hier sollte jedoch bevorzugt die Funktion Add() verwendet werden, da diese auch dazu genutzt werden kann, eine neue Variable zu deklarieren. Existiert die Variable schon, so ersetzt die Funktion Add() den Wert der Variablen durch den neuen, welcher angegeben wurde. Als Parameter übergeben wir der Funktion den Namen der Variable und den Wert (dabei kann es sich um eine Zeichenkette, eine Zahl oder einen anderen Wert handeln). Mittels der Funktion Remove() kann eine bestimmte Variable des Ansichtszustands wieder entfernt werden. Im Beispiel wird eine Zufallszahl generiert und diese im Ansichtszustand gespeichert. Beim Klicken auf den Button wird die Seite „gepostet“ und eine neue Zufallszahl generiert und angezeigt. Zudem wird die vorherige Zahl ausgelesen und ebenfalls angezeigt. Dieser Vorgang kann mehrmals wiederholt werden, wovon immer die letzte Zufallszahl „erhalten“ bleibt.

<form runat="server">
	<b>Aktuelle Zufallszahl:</b> <%= iZufallAktuell %><br />
	<b>Letzte Zufallszahl:</b> <%= sZufallLetzte %><br />
	<br />
	<input type="submit" value="Seite erneut aufrufen" />
</form>
using System;

namespace HWhBsp.Ansichtszustand
{
    public partial class Default : System.Web.UI.Page
    {
        protected int iZufallAktuell;
        protected string sZufallLetzte;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            iZufallAktuell = (new Random()).Next(1, 1001);
            sZufallLetzte = ViewState["LetzterZufall"] != null ? (string)ViewState["LetzterZufall"] : "-";
            ViewState.Add("LetzterZufall", iZufallAktuell.ToString());
        }
    }
}
VorschauDownload

Wichtig: Wenn Sie die Seite „manuell“ erneut aufrufen (z. B. durch erneute Eingabe der URL oder durch klicken auf einen Link), so sind die Daten des Ansichtszustands verloren. Die Daten bleiben also lediglich zwischen Postbacks erhalten.


Session-Variablen (zu Deutsch Sitzungs-Variablen) ermöglichen es, Daten über eine Seite hinaus zu speichern. Technisch realisiert werden Sessions mit einem Cookie, welches eine Dauer von 0 hat und somit bis zum Schließen des Browsers gültig ist. Dadurch sind auch die Daten bis zum Schließen des Browsers gültig. Die Session-Variablen werden auf dem Server gespeichert. Im Browser wird leidglich eine Session-ID (in Form eines Cookies, wie oben beschrieben) gespeichert. Der Browser schickt bei jeder Anfrage diese Session-ID zurück an den Webserver, wodurch dieser die Variablen, welche zur Session gehören, zuordnen kann. Der Zugriff auf Session-Variablen ist vergleichbar mit dem für den Ansichtszustands. Als Eigenschaft wird hier Session verwendet. Session enthält ein Objekt, bei welchem auch über die Indizierung (mittels einem eckigen Klammernpaar) zugegriffen werden kann. Die Funktionen Add() und Remove() sind hier ebenfalls verfügbar. Des Weiteren gibt es hier die Funktion RemoveAll(), mit welcher alle Variablen der Sitzung gelöscht werden können. Das folgende Beispiel ist mit dem Ansichtszustands-Beispiel vergleichbar, speichert jedoch die Zufallszahl auch über einen erneuten (manuellen) Seitenaufruf hinaus.

<form runat="server">
	<b>Aktuelle Zufallszahl:</b> <%= iZufallAktuell %><br />
	<b>Letzte Zufallszahl:</b> <%= sZufallLetzte %><br />
	<br />
	<input type="submit" value="Seite erneut aufrufen" />
</form>
using System;

namespace HWhBsp.Session
{
    public partial class Default : System.Web.UI.Page
    {
        protected int iZufallAktuell;
        protected string sZufallLetzte;

        protected void Page_Load(object sender, EventArgs e)
        {
            iZufallAktuell = (new Random()).Next(1, 1001);
            sZufallLetzte = Session["LetzterZufall"] != null ? (string)Session["LetzterZufall"] : "-";
            Session.Add("LetzterZufall", iZufallAktuell.ToString());
        }
    }
}
VorschauDownload

Cookies erlauben das Speichern von Informationen über eine Sitzung hinaus. Cookies haben eine bestimmte Gültigkeitsdauer, welche beim Setzen des Cookies angegeben werden muss. Des Weiteren kann ein Cookie auf einen Pfad beschränkt werden. Cookies werden vom Server „geschrieben“, vom Browser gespeichert und verwaltet und bei einer Anfrage an den Server wieder zurück an den Server übertragen. Durch die Tatsache, dass die Cookie-Werte im Browser gespeichert werden, können diese Werte ebenfalls manipuliert werden. Speichern Sie also auch hier niemals sicherheitsrelevante Daten. Cookies werden in ASP.NET durch ein Objekt der Klasse HttpCookie repräsentiert. Die Eigenschaft Name legt den Namen fest, Value den Wert, Path den Pfad, in welchem das Cookie gültig ist (gilt auch für dessen Unterverzeichnisse), und Expires den Ablaufzeitpunkt, ab wann das Cookie nicht mehr gültig ist (und somit vom Browser verworfen wird). Dem Konstruktor der Klasse HttpCookie kann der Name und Wert des Cookies übergeben werden, wovon der Parameter für den Wert optional ist. Die Cookies, welche vom Browser gesendet und vom Server empfangen wurden, können über die Eigenschaft Cookies der HttpRequest-Klasse abgerufen werden. Ein Zugriff auf die (neuen) Cookies, welche „geschrieben“ bzw. „gesetzt“ werden sollen, erhalten Sie über die Eigenschaft Cookies der HttpResponse-Klasse. Um ein neues Cookie zu „deklarieren“, können wir die Funktion Add() verwenden.

<form runat="server">
	<b>Aktuelle Zufallszahl:</b> <%= iZufallAktuell %><br />
	<b>Letzte Zufallszahl:</b> <%= sZufallLetzte %><br />
	<br />
	<input type="submit" value="Seite erneut aufrufen" />
</form>
using System;
using System.Web;

namespace HWhBsp.Cookies
{
    public partial class Default : System.Web.UI.Page
    {
        protected int iZufallAktuell;
        protected string sZufallLetzte;

        protected void Page_Load(object sender, EventArgs e)
        {
            iZufallAktuell = (new Random()).Next(1, 1001);
            sZufallLetzte = Request.Cookies["LetzterZufall"] != null ? Request.Cookies["LetzterZufall"].Value : "-";
            Response.Cookies.Add(new HttpCookie("LetzterZufall", iZufallAktuell.ToString())
            {
                Expires = DateTime.Now.AddHours(1)
            });
        }
    }
}
VorschauDownload
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK