Suche…


Syntax

  • Session ["Session_Key"] = Obj_Value;

Bemerkungen

HTTP ist zustandslos. Der ASP.NET-Sitzungsstatus ist ein Rahmen, der das Aufrechterhalten des Status zwischen HTTP-Seitenanforderungen erleichtert.

Session unterscheidet sich von den Variablen auf Klassenebene in ihrer Fähigkeit, über Postbacks und verschiedene Seiten verfügbar zu bleiben. Beispielsweise ist eine in Page1.aspx erstellte Sitzungsvariable verfügbar, wenn der Benutzer anschließend in derselben Anwendung zu Page2.aspx umgeleitet wird.

Im Gegensatz zu statischen Variablen, die auf Seitenebene deklariert werden, sind die Sitzungsvariablen für verschiedene Benutzer unabhängig. Das heißt, das Ändern des Werts der Sitzungsvariablen eines Benutzers wirkt sich nicht auf den Wert derselben Variablen für andere Benutzer aus.

ViewState kann zwar zum temporären Speichern von Benutzerdaten verwendet werden, das Speichern von Daten auf mehreren Seiten ist jedoch nicht möglich. Außerdem ist der viewstate Teil der Seite und wird an den Client gesendet. Daher können wichtige Informationen, die sich auf den Benutzer beziehen, nicht im ViewState gespeichert werden. In diesem ViewState werden Session-Variablen nützlich.

Verwenden des Session-Objekts zum Speichern von Werten

Das System.Web.SessionState.HttpSessionState Objekt bietet eine Möglichkeit, Werte zwischen HTTP-Anforderungen zu speichern. In dem folgenden Beispiel wird die Präferenz eines Benutzers für Warnungen in der Sitzung gespeichert. Später, während eine weitere Anfrage an den Benutzer gesendet wird, kann die Anwendung diese Einstellung aus der Sitzung lesen und die Warnungen ausblenden.

public partial class Default : System.Web.UI.Page
{
    public void LoadPreferences(object sender, EventArgs args)
    {
        // ... 
        // ... A DB operation that loads the user's preferences.
        // ...

        // Store a value with the key showWarnings
        HttpContext.Current.Session["showWarnings"] = false;
    }

    public void button2Clicked(object sender, EventArgs args)
    {
        // While processing another request, access this value.
        bool showWarnings = (bool)HttpContext.Current.Session["showWarnings"];
        lblWarnings.Visible = false;
    }
}    

Beachten Sie, dass die Sitzungsvariablen nicht für alle Benutzer gleich sind (genau wie Cookies) und dass sie über mehrere Post-Backs hinweg beibehalten werden.

Die Sitzung funktioniert, indem ein Cookie gesetzt wird, das eine Kennung für die Benutzersitzung enthält. Standardmäßig wird diese Kennung zusammen mit den darauf gespeicherten Werten im Webserver-Speicher gespeichert.

Hier ist ein Screenshot des Cookies des Browsers des Benutzers, um die Sitzung zu verfolgen:

sessionStateCookie

Verwenden eines SQL-Sitzungsspeichers

Wenn Sie feststellen, dass Sie über mehrere Server verfügen, die den Sitzungsstatus gemeinsam nutzen müssen, funktioniert das Speichern im ASP.NET-Prozessspeicher nicht. Sie können beispielsweise in einer Webfarmumgebung mit einem Lastenausgleichsmodul bereitstellen, das Anforderungen in einer Round-Robin-Art verteilt. In dieser Umgebung können die Anforderungen eines einzelnen Benutzers von mehreren Servern bearbeitet werden.

In der Datei web.config können Sie einen SQL Server-Sitzungsspeicher konfigurieren.

<configuration>
  <system.web>
    <sessionState 
      mode="SQLServer"
      sqlConnectionString="Data Source=localhost;Integrated Security=SSPI"
      cookieless="true"
      timeout="30" />
  </system.web>
</configuration>

Verwenden Sie zum Erstellen des SQL-Schemas das Werkzeug aspnet_regsql. [SampleSqlServerName] ist der Hostname des SQL-Servers. -ssadd weist das Tool an, die Sitzungsstatusdatenbank zu erstellen. -sstype p weist das Tool an, eine neue Datenbank mit dem Standardnamen ASPState zu erstellen.

aspnet_regsql.exe -S [SampleSqlServerName] -U [Username] -P [Password] -ssadd -sstype p

Verwenden eines Amazon DynamoDB-Sitzungsspeichers

Wenn Sie keinen SQL-Server verwenden möchten, können Sie die von Amazon gehostete Dynamo DB-Nosql-Datenbank als Session Store verwenden.

Sie benötigen das AWS SDK. Verwenden Sie den folgenden Befehl, um dies über die Visual Studio-Nuget-Paket-Manager-Konsole zu installieren

Install-Package AWSSDK 

Sie können dann Ihren sessionState-Provider so konfigurieren, dass er einen benutzerdefinierten Provider verwendet. Sie müssen die Region und die Anmeldeinformationen angeben, entweder ein Profil oder eine Kombination aus IAM-Zugriff und geheimem Schlüssel. Standardmäßig wird eine Tabelle mit dem Namen ASP.NET_SessionState erstellt.

<configuration>
  <system.web>
    <sessionState
      timeout="20"
      mode="Custom"
      customProvider="DynamoDBSessionStoreProvider">
      <providers>
        <add name="DynamoDBSessionStoreProvider"
             type="Amazon.SessionProvider.DynamoDBSessionStateStore"
             AWSProfileName="[PROFILE]"
             Region="[REGION]"
             CreateIfNotExist="true"
             />
      </providers>
    </sessionState>
  </system.web>
</configuration>


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow