Szukaj…


Składnia

  • Sesja [„Session_Key”] = Obj_Value;

Uwagi

HTTP jest bezstanowy. Stan sesji ASP.NET to platforma, która ułatwia utrzymanie stanu między żądaniami stron HTTP.

Sesja różni się od zmiennych na poziomie klasy tym, że może pozostawać dostępna na post-backach i na różnych stronach. Na przykład zmienna sesji utworzona w Page1.aspx będzie dostępna, jeśli użytkownik zostanie później przekierowany na Page2.aspx, w tej samej aplikacji.

Ponadto, w przeciwieństwie do zmiennych statycznych zadeklarowanych na poziomie strony, zmienne sesji są niezależne dla różnych użytkowników. Oznacza to, że zmiana wartości zmiennej sesji jednego użytkownika nie wpłynie na wartość tej samej zmiennej dla innych użytkowników.

Chociaż ViewState może służyć do tymczasowego przechowywania danych użytkownika, nie pozwala na zapisywanie danych na wielu stronach. Ponadto viewstate jest częścią strony i jest wysyłany do klienta. W rezultacie nie można zapisać żadnych krytycznych informacji związanych z użytkownikiem w ViewState i właśnie tam zmienne Session stają się przydatne.

Używanie obiektu Session do przechowywania wartości

Obiekt System.Web.SessionState.HttpSessionState zapewnia sposób na zachowanie wartości między żądaniami HTTP. W poniższym przykładzie preferencje użytkownika dotyczące ostrzeżeń są zapisywane w sesji. Później, podczas obsługi innego żądania do użytkownika, aplikacja może odczytać tę preferencję z sesji i ukryć ostrzeżenia.

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;
    }
}    

Pamiętaj, że zmienne sesji nie są wspólne dla wszystkich użytkowników (podobnie jak pliki cookie) i są utrwalane na wielu post-backach.

Sesja polega na ustawieniu pliku cookie zawierającego identyfikator sesji użytkownika. Domyślnie ten identyfikator jest przechowywany w pamięci serwera WWW wraz z wartościami przechowywanymi na jego podstawie.

Oto zrzut ekranu pliku cookie ustawionego w przeglądarce użytkownika w celu śledzenia sesji:

sessionStateCookie

Korzystanie z magazynu sesji SQL

Jeśli okaże się, że masz wiele serwerów, które muszą współużytkować stan sesji, zapisanie go w pamięci procesu ASP.NET nie będzie działać. Na przykład możesz wdrożyć w środowisku farmy internetowej za pomocą modułu równoważenia obciążenia, który dystrybuuje żądania w sposób okrągły. W tym środowisku żądania jednego użytkownika mogą być obsługiwane przez wiele serwerów.

W pliku web.config możesz skonfigurować magazyn sesji SQL Server.

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

Aby utworzyć schemat SQL, użyj narzędzia aspnet_regsql. [SampleSqlServerName] to nazwa hosta serwera SQL. -ssadd mówi narzędziu, aby utworzyło bazę danych stanu sesji. -sstype p mówi narzędziu, aby utworzyło nową bazę danych o domyślnej nazwie ASPState.

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

Korzystanie ze sklepu sesyjnego Amazon DynamoDB

Jeśli nie chcesz korzystać z serwera SQL, możesz użyć hostowanej bazy danych Dynamo DB nosql firmy Amazon jako magazynu sesji.

Potrzebujesz zestawu AWS SDK. Aby zainstalować to z konsoli menedżera pakietów nuget programu Visual Studio, użyj następującego polecenia

Install-Package AWSSDK 

Następnie możesz skonfigurować dostawcę sessionState do korzystania z niestandardowego dostawcy. Musisz określić region i poświadczenia, profil lub kombinację dostępu IAM i tajnego klucza. Domyślnie utworzy to tabelę o nazwie ASP.NET_SessionState.

<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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow