2016-11-30 13 views
0

Ich verwende meine c# App, um eine Anfrage an die Webseite zu senden. Bevor ich eine Anfrage abschicke, muss ich auf dieser Webseite eingeloggt sein. Ich möchte die Protokollierung jedes Mal vermeiden, wenn ich etwas arbeiten möchte, also speichere ich Cookies in der SQL Server-Datenbank in VARBINARY Spalte.Muss ich jedes Cookie jedes Mal aktualisieren?

Lets sagen, dass ich 50 bin Senden POST requests jeden Tag:

private string getRequest(string url, string postData = "") 
     { 
      try 
      { 
       System.Net.ServicePointManager.Expect100Continue = true; 
       StreamReader reader; 
       var request = WebRequest.Create(url) as HttpWebRequest; 
       request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14"; 
       request.CookieContainer = Cookie; 
       request.AllowAutoRedirect = true; 
       request.ContentType = "application/x-www-form-urlencoded"; 
       request.Headers.Add("X-Requested-With", "XMLHttpRequest"); 
       postData = Uri.EscapeUriString(postData); 
       request.Method = "POST"; 
       request.ContentLength = postData.Length; 
       Stream requestStream = request.GetRequestStream(); 
       Byte[] postBytes = Encoding.ASCII.GetBytes(postData); 

       requestStream.Write(postBytes, 0, postBytes.Length); 
       requestStream.Close(); 

       HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
       foreach (Cookie tempCookie in response.Cookies) 
       { 
        Cookie.Add(tempCookie); 
       } 
       reader = new StreamReader(response.GetResponseStream()); 
       string readerReadToEnd = reader.ReadToEnd(); 
       response.Close(); 

       database.updateCookie(AccountId, Cookie); //here I am updating the cookies 

       return readerReadToEnd; 
      } 
      catch { return ""; } 

Muss ich Cookies aktualisieren müssen, um wirklich nach jeder Anfrage? Oder könnte ich meine Cookies nur einmal aktualisieren, nachdem ich 50 POST requests gesendet habe?

Ich frage, weil manchmal meine Kekse paar Tage dauern, und manchmal sind sie nach 1 Minute gestorben. Ich weiß nicht wirklich warum und wie ich das vermeiden kann.

Muss ich die neueste Version von Cookies speichern, oder kann ich sie immer verwenden?

+0

Das hängt davon ab, welche Cookies der Server sendet. – SLaks

+0

Warum müssen Sie Cookies in Ihrer Datenbank speichern? Cookies gehören auf den Client-Rechner, wenn Sie sie auch in der Datenbank speichern, was ist der Punkt der Speicherung auf dem Client-Rechner? –

+0

@SeanLange, weil ich meinen PC manchmal neu starte. Ich möchte Cookies in der Datenbank speichern, um die Protokollierung zu vermeiden. – Dawvawd

Antwort

0

Jeder Standort entscheidet, wie lange bestimmte Cookies gültig sind. Daher müssen Sie diese Informationen für jede Website einzeln abrufen, um sie korrekt auszuführen. Die Beachtung des "Ablaufs" auf dem Cookie (in den "set-cookie" -Kopfzeilen der Antwort) kann Ihnen eine erste Anleitung geben, wann der Cookie garantiert abläuft.

Gemeinsamer Ablauf/Gültigkeitsbereiche:

  • Authentifizierungscookies - von 10 Minuten bis 1 Tag
  • ASP.Net Sitzungszustand - von 20 Minuten
  • CSRF-Schutz - möglicherweise auf jeder Antwort aktualisiert
+0

Hmm aber wenn ich zB Stackoverflow 7 Tage später betrete bin ich noch angemeldet. Ich möchte das Gleiche in meiner C# -Anwendung tun. Wenn ich zum Beispiel nach 3 Tagen noch eine Anfrage sende, möchte ich bereits in meiner C# App eingeloggt sein. – Dawvawd

+0

@Dawvawd "common"! = "Jeder einzelne" ... Fühlen Sie sich frei, herauszufinden, wie bestimmte Website Authentifizierung handhaben und weg hacken ... Beachten Sie, dass einige Websites bieten eine geeignete API für den Zugriff auf Informationen von Nicht-Web-Anwendungen - abhängig von Auf Ihre Zielseiten kann es besser gehen, als darauf zu hoffen, Kekse beim Kratzen richtig zu bekommen. –

Verwandte Themen