2017-12-06 3 views
5

Ich habe eine asp.net mvc-Anwendung und ich habe diese seltsame Sache, die passiert und ich weiß nicht warum.Cookies werden gelöscht

Kontext:

Ich habe eine Seite, die die Benutzer Bilder zeichnen und bearbeiten kann. Diese Seite hat eine Funktion, dass sie alle 5 Minuten einen Ajax-Aufruf an den Server unter Verwendung von jquery, Speichern des aktuellen Status des Projekts in der Datenbank und einen weiteren Aufruf zum Speichern eines Bildes des Projekts, das Speicher an einem richtigen Ort ist .

Problem:

Mit dem Browser minimiert, wenn diese Funktion gestartet wird, nach dem Ajax-Aufruf an den Server, der Cookie Kunde ist gelöscht. Aber wenn der Chrom maximiert ist, funktioniert das gut.

Hinweise:

  1. Dies geschieht nur, wenn der Browser
  2. minimiert Dies geschieht, zumindest in Chrome und Firefox.
  3. Dies geschieht nur in der Produktionsumgebung. Auf meinem lokalen Rechner und auf Visual Studio kann ich nicht das Problem reproduzieren
  4. Der asp.net Session-Cookie mantainned wird

Ich weiß, dass schwierig ist für Sie nur mit diesen Informationen zu helfen, aber, wenn Sie geben können Ich denke, es wird sehr hilfreich sein. Ich versuche, das Problem aufzudecken, damit wir ähnliche Probleme abgleichen können, um die beste Lösung für diesen Fall zu finden.

Vielen Dank im Voraus

[EDIT]:

ich über das Thema einige neue haben:

  1. Mit Chrome Version 63.0.3239.84 (Official Erstellung) (64-bit);
  2. Firefox Quanten 57,0 (64-Bit);
  3. Im Gegensatz dazu habe ich zuerst gedacht, das passiert auch wenn der Browser nicht minimiert wird und genau 3 Min. Nach dem Laden der Seite (wenn ich die Funktion anrufe)
  4. Die Cookies werden nicht gelöscht aber der Inhalt des Cookies ist : enter image description here
  5. Dies ist ein asp.net Web-Anwendung
  6. die Konsole keine Fehler
  7. die Version der Abfrage
  8. Folgt dem jquery Anruf-Code ist 2.1.3 nicht gibt:

    makeAjaxCall(ajaxData) { 
    var localData = ajaxData.data ? ajaxData.data : {}, 
        urlVariables = {}; 
    
    localData.cmd = ajaxData.cmd; 
    
    var controlerURL = ajaxData.uploadUrl ? HelperJSViewBag.getValue("ajaxCAllUploadURL") : ajaxData.controller; 
    
    if (typeof ajaxData.data.urlVariables == "undefined") 
        ajaxData.data.urlVariables = []; 
    
    let editorVersion = ""; 
    let forceEditorVersion = ""; 
    
    if (typeof UrlParameters != "undefined") { 
        editorVersion = UrlParameters.getInstance().editorVersion; 
        forceEditorVersion = UrlParameters.getInstance().forceEditorVersion; 
    } 
    else if (typeof HLinks != "undefined") { 
        editorVersion = HLinks.getUrlVariable("editorVersion"); 
        forceEditorVersion = HLinks.getUrlVariable("forceEditorVersion"); 
    } 
    
    if (editorVersion.length > 0) 
        ajaxData.data.urlVariables.push({ 
         name: "editorVersion", 
         value: editorVersion, 
        }); 
    
    if (forceEditorVersion.length > 0) 
        ajaxData.data.urlVariables.push({ 
         name: "forceEditorVersion", 
         value: forceEditorVersion, 
        }); 
    
    if (typeof ajaxData.data.urlVariables != "undefined" && ajaxData.data.urlVariables.length > 0) 
        for (var i = 0; i < ajaxData.data.urlVariables.length; i++) 
         urlVariables[ajaxData.data.urlVariables[i].name] = ajaxData.data.urlVariables[i].value; 
    
    localData = this.fillLocalData(localData); 
    
    return $.ajax({ 
        type: 'POST', 
        data: localData, 
        url: controlerURL + "?" + $.param(urlVariables), 
        success: function (data) { 
         try { 
          var result = JSON.parse(data), 
           status = result.status; 
    
          delete result.status 
          switch (status) { 
           case 1: ajaxData.sucess && ajaxData.sucess(result.data); break; 
           case 2: ajaxData.insucess && ajaxData.insucess(ajaxData.errorHandler && ajaxData.errorHandler.handle && ajaxData.errorHandler.handle(result)); break; 
          } 
         } 
         catch (ex) { 
          ajaxData.insucess && ajaxData.insucess(ajaxData.errorHandler && ajaxData.errorHandler.handle && ajaxData.errorHandler.handle(ex)); 
         } 
        }, 
        error: function (data) { 
         ajaxData.insucess && ajaxData.insucess(ajaxData.errorHandler && ajaxData.errorHandler.handle && ajaxData.errorHandler.handle(data)); 
        } 
    }); 
    } 
    
+2

Können Sie die Registerkarte Netzwerk aktivieren und minimieren Sie den Browser? Setzen Sie console.log auch mit Zeitdruck, damit Sie wissen, was passiert, ob aus irgendeinem Grund die Sitzung abläuft oder der Anruf nicht erfolgt? Ich nehme an, dass Sie setTimeout oder setInterval verwenden? In jedem Fall fügen Sie Protokollierung und Kontrolle Konsole nach dem Minimieren –

+0

Da dies mit Zeichnungen verbunden ist, denke ich, kann es ein Problem beim Lesen des Bildschirms, wenn minimiert werden? Wenn Sie das Cookie löschen, bevor Sie den Ajax-Anruf tätigen, kann ein Fehler beim Ajax-Anruf dazu führen, dass ein Cookie gelöscht wird. – cytsunny

+0

Welchen Code verwenden Sie, um den Cookie zu generieren? Treten in diesem Fall Konsolenfehler auf? Welche Version von Chrome und FF verwenden Sie zum Testen? – Twisty

Antwort

0

Ich mag Ihren Code auf der ASP sehen.NET-Seite, aber ohne das kann ich nur raten: vielleicht überprüfen, ob Sie ein Cookie-Ablaufdatum setzen? Hier ist ein Beispiel eines Cookies, die mit 1 Tag Ablauf erstellt:

Dim myCookie As HttpCookie = New HttpCookie("Customer") 
myCookie.Expires = Now.AddDays(1) 
Response.Cookies.Add(myCookie) 

Wenn Sie myCookie.Expires Eigenschaft weglassen, das Cookie „erlischt, wenn die Benutzersitzung abläuft“, ref. https://msdn.microsoft.com/en-us/library/78c837bd.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

0
  1. können Sie die Ablaufzeit des Cookies (Im Code, wo Sie Cookies erstellen) erhöhen.

  2. Sie können localStorage in Ihrem Code anstelle von Cookies verwenden, um den Wert zu halten.

Für examlpe localStorage.setItem Wert zu setzen und localStorage.getItem den Wert aus dem lokalen Speicher zu erhalten.

Verwandte Themen