Zoeken…


Syntaxis

  • Session ["Session_Key"] = Obj_Value;

Opmerkingen

HTTP is staatloos. ASP.NET-sessiestatus is een raamwerk dat het onderhouden van de status tussen HTTP-pagina-aanvragen vergemakkelijkt.

Sessie verschilt van de variabelen op klasniveau in de mogelijkheid om beschikbaar te blijven voor post-backs en verschillende pagina's. Een sessievariabele die is gemaakt in Page1.aspx is bijvoorbeeld beschikbaar als de gebruiker nadien wordt doorgestuurd naar Page2.aspx, binnen dezelfde applicatie.

In tegenstelling tot statische variabelen die op paginaniveau worden gedeclareerd, zijn de sessievariabelen onafhankelijk voor verschillende gebruikers. Dit betekent dat het wijzigen van de waarde van de sessievariabele van een gebruiker de waarde van dezelfde variabele voor andere gebruikers niet beïnvloedt.

Hoewel ViewState kan worden gebruikt om gebruikersgegevens tijdelijk op te slaan, is het niet mogelijk gegevens op meerdere pagina's op te slaan. Bovendien maakt de viewstate deel uit van de pagina en wordt deze naar de client verzonden. Als gevolg hiervan kan geen kritieke informatie met betrekking tot de gebruiker worden opgeslagen in de ViewState , en dat is waar sessievariabelen nuttig worden.

Het sessieobject gebruiken om waarden op te slaan

Het object System.Web.SessionState.HttpSessionState biedt een manier om waarden tussen HTTP-aanvragen te behouden. In het onderstaande voorbeeld wordt de voorkeur van een gebruiker voor waarschuwingen opgeslagen in de sessie. Later, terwijl de gebruiker een ander verzoek indient, kan de toepassing deze voorkeur uit de sessie lezen en de waarschuwingen verbergen.

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

Houd er rekening mee dat de sessievariabelen niet voor alle gebruikers gelden (net als cookies) en dat ze meerdere keren achter elkaar blijven bestaan.

De sessie werkt door een cookie in te stellen dat een ID voor de gebruikerssessie bevat. Standaard wordt deze identifier opgeslagen in het webservergeheugen, samen met de waarden die erop worden opgeslagen.

Hier is een screenshot van de cookie die in de browser van de gebruiker is ingesteld om de sessie bij te houden:

sessionStateCookie

Een SQL Session Store gebruiken

Als u merkt dat u meerdere servers hebt die de sessiestatus moeten delen, werkt het opslaan in het ASP.NET-procesgeheugen niet. U kunt bijvoorbeeld gebruikmaken van een webfarm-omgeving met een load balancer die aanvragen op een round robin-manier distribueert. In deze omgeving kunnen verzoeken van een enkele gebruiker worden bediend door meerdere servers.

In het web.config-bestand kunt u een SQL Server-sessiearchief configureren.

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

Gebruik het hulpprogramma aspnet_regsql om het sql-schema te maken. [SampleSqlServerName] is de hostnaam van de SQL-server. -ssadd vertelt het hulpprogramma om de sessiestatusdatabase te maken. -sstype p vertelt de tool om een nieuwe database te maken met de standaardnaam ASPState.

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

Een Amazon DynamoDB-sessieopslag gebruiken

Als u geen SQL-server wilt gebruiken, kunt u Amazon's gehoste Dynamo DB nosql-database gebruiken als sessieopslag.

U hebt de AWS SDK nodig. Gebruik de volgende opdracht om dit te installeren vanuit de Visual Studio nuget-pakketbeheerconsole

Install-Package AWSSDK 

U kunt vervolgens uw sessionState-provider configureren om een aangepaste provider te gebruiken. U moet de regio en referenties opgeven, een profiel of een combinatie van IAM-toegang en geheime sleutel. Standaard wordt hiermee een tabel met de naam ASP.NET_SessionState gemaakt.

<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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow