web-dev-qa-db-fra.com

Le délai de session est-il réinitialisé à chaque demande?

Le délai d'expiration de session est-il réinitialisé à chaque demande, que nous vérifiions ou non les variables de session? Ou devrions-nous utiliser au moins une variable de session?

La demande Ajax entraîne-t-elle la réinitialisation du délai d'attente de la session? comme Update Panel, jQuery ajax, ...

merci


Modifier 1)

HTTP Get entraîne-t-il la réinitialisation du délai d'attente de la session?

16
Arian

oui. peu importe que vous utilisiez réellement la variable Session ou non.
Cependant, si vous utilisez des appels only ajax, vous risquez de rencontrer des problèmes.
(même si je ne l’ai pas rencontré moi-même, une explication de ici )

11
J. Ed

Le délai d'expiration de session est-il réinitialisé à chaque demande, que nous vérifiions ou non les variables de session?

Session n’expirera pas si vous continuez à appeler le code côté serveur. Le délai d'expiration session sera réinitialisé à chaque demande adressée au serveur. Lors des demandes ultérieures adressées au même site Web, le navigateur fournit le ASP.NET_SessionId Cookie que le module côté serveur utilise pour accéder à la valeur de la session (comme les informations utilisateur).

---------------------------------------------------------------------------------
                     How to detect the Session TimeOut
---------------------------------------------------------------------------------

enter image description here

---------------------------------------------------------------------------------

Question - 2 - La demande Ajax provoque-t-elle la réinitialisation du délai d'attente de la session? comme Update Panel, jQuery ajax, ...

Question - 3 - HTTP Get provoque-t-il la réinitialisation du délai d'expiration de la session?

Session expirera au cas où l'utilisateur aurait attendu trop longtemps entre les demandes. Session n’expirera pas si vous continuez à appeler le code server side. Le délai d'expiration session sera réinitialisé à chaque demande adressée au serveur.

Web.Config

<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" 
 sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
    cookieless="true" timeout="1" />
18
Pankaj

Le délai d'attente de session est-il réinitialisé à chaque demande, que nous vérifiions ou non les variables de session? Ou devrions-nous utiliser au moins une variable de session?

Jusqu'à ce qu'une variable de session soit établie, un nouvel identifiant de session est généré pour chaque publication.

La demande Ajax provoque-t-elle la réinitialisation du délai d'attente de la session? comme Update Panel, jQuery ajax, ...

L'ID de session, enregistré dans le cookie par défaut, est envoyé pour chaque demande AJAX ainsi que pour une demande autre que AJAX. Par conséquent, le serveur est conscient que l'utilisateur de session est actif. Ne prenez pas ma parole pour cela. Utilisez fiddler ou l’outil F12 dans ie. Vous pouvez voir les cookies envoyés avec chaque demande AJAX GET/POST.

4
Arcturus

Cela dépendra de nombreux facteurs, je vous suggère donc de faire un test comme ci-dessous. Cela prend vraiment moins de 5 minutes pour savoir si votre situation exacte fonctionne dans votre environnement. Voici le code que j'ai utilisé pour tester cela. J'utilise les contrôles Telerik pour tester l'idée, mais j'ai ajouté un .get pour obtenir la réponse exacte que vous vouliez. page aspx a

<telerik:RadScriptManager ID="RadScriptManager1" Runat="server">
        </telerik:RadScriptManager>
        <telerik:RadAjaxManager ID="ram" runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="btnFake">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="lblAnswer" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
        <script src="Scripts/jquery-1.4.1-vsdoc.js"></script>
    <script>
        $(document).ready(function () {
            setTimeout(function () { document.location.href = "default.aspx?next"; }, 61000);
            setInterval(function () {
                var divForTimer = $("#divTime");
                var secs = parseInt(divForTimer.html());
                secs = secs + 1;
                $("#divTime").html(secs.toString());
            }, 1000);

        });
        function getPage() {

            $.get("test.aspx", function(result) {
                $("#btnFake").val("Got it");

            });
        }
    </script>
   <asp:Label ID="lblAnswer" runat="server"></asp:Label>
   <Asp:button ID="btnTest" runat="server" Text="Renew" onclick="btnTest_Click" />
   <input type="button" ID="btnAjaxget"  onclick ="getPage()"  value="Ajax get" />
   <asp:Button ID="btnFake" runat="server"  Text ="Fake it" 
        onclick="btnFake_Click"/>
        <div id="divTime">1</div>

la page .cs a

protected void Page_Load(object sender, EventArgs e)
        {
            Session.Timeout = 1;
            if (EMSG.CommonFunctions.GetSession("test").Length > 0)
            {
                this.lblAnswer.Text = "Session=" + EMSG.CommonFunctions.GetSession("test");
            }
            else
            {
                this.lblAnswer.Text = "No session";
            }

        }

        protected void btnTest_Click(object sender, EventArgs e)
        {
            Session["test"] = "variable set";
            this.lblAnswer.Text = Session["test"].ToString();
        }

        protected void btnFake_Click(object sender, EventArgs e)
        {
            lblAnswer.Text = "Ajax called.";
        }

--- vous pouvez organiser ce qui précède en fonction de votre situation. Mais l'idée est simple. Vous chargez la page. Cliquez sur le bouton "Renouveler" pour définir votre session. Attendez 61 secondes, la page s'actualise et la variable de session disparaît. Essayez à nouveau, mais cette fois-ci, cliquez sur l'un des deux autres boutons après quelques secondes. Lorsque la page sera rafraîchie, vous verrez que la variable de session est restée intacte depuis les appels ajax. L'appel ajax dans cette situation rafraîchit la variable de session.

1
done_merson