Sök…


Syntax

  • Session ["Session_Key"] = Obj_Value;

Anmärkningar

HTTP är statslöst. ASP.NET-sessionstillstånd är ett ramverk som underlättar upprätthållande av tillstånd mellan HTTP-sidbegäranden.

Session skiljer sig från klassnivåvariablerna i sin förmåga att förbli tillgängliga över post-backs och olika sidor. En sessionvariabel som skapats i Page1.aspx är till exempel tillgänglig om användaren omdirigeras till Page2.aspx efteråt inom samma applikation.

Till skillnad från statiska variabler som deklarerats på sidnivå är sessionvariablerna oberoende för olika användare. Betydelse, att ändra värdet på en användares sessionvariabel påverkar inte värdet på samma variabel för andra användare.

Medan ViewState kan användas för att lagra användarens data tillfälligt tillåter det inte att spara data på flera sidor. Dessutom är viewstate del av sidan och skickas till klienten. Som ett resultat kan all kritisk information relaterad till användaren inte sparas i ViewState , och det är där Session-variabler blir användbara.

Använd Session-objektet för att lagra värden

System.Web.SessionState.HttpSessionState objektet ger ett sätt att bestå värden mellan HTTP-förfrågningar. I exemplet nedan sparas en användares preferens för varningar i sessionen. Senare, medan en annan begäran visas till användaren, kan applikationen läsa denna inställning från sessionen och dölja varningarna.

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

Observera att sessionvariablerna inte är vanliga för alla användare (precis som cookies), och att de kvarstår över flera post-backs.

Sessionen fungerar genom att ställa in en cookie som innehåller en identifierare för användarsessionen. Som standard lagras denna identifierare i webbserverns minne, tillsammans med de värden som lagras mot den.

Här är en skärmdump av cookieuppsättningen i användarens webbläsare för att hålla reda på sessionen:

sessionStateCookie

Använda en SQL Session Store

Om du upptäcker att du har flera servrar som behöver dela sessionstillstånd fungerar inte lagring av det i ASP.NET-processminnet. Du kan till exempel distribuera till en miljö på webben med en lastbalans som distribuerar förfrågningar på en runda robin-sätt. I denna miljö kan en enskild användares förfrågningar serveras av flera servrar.

I web.config-filen kan du konfigurera en SQL-server session butik.

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

För att skapa sql-schema använder du aspnet_regsql-verktyget. [SampleSqlServerName] är SQL-serverns värdnamn. -ssadd berättar för verktyget för att skapa sessionstillståndsdatabasen. -styp p berättar för verktyget att skapa en ny databas med standardnamnet ASPState.

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

Med hjälp av en Amazon DynamoDB Session Store

Om du inte vill använda SQL-server kan du använda Amazons värd Dynamo DB nosql-databas som en sessionlager.

Du behöver AWS SDK. För att installera detta från Visual Studio nuget-pakethanterarkonsolen använder du följande kommando

Install-Package AWSSDK 

Du kan sedan konfigurera din sessionState-leverantör så att den använder en anpassad leverantör. Du måste ange region och referenser, antingen en profil eller en IAM-åtkomst och hemlig tangentkombination. Som standard skapar detta en tabell med namnet 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow