Meine C# -App macht einige Arbeit auf der Website. Ich möchte dasselbe Cookie verwenden, anstatt jedes Mal, wenn ich meine Anwendung starte, ein neues zu erstellen. Ich möchte Cookie in Datenbank speichern oder serialisieren.Speichern und Abrufen von Cookies
Der Code ist:
CookieContainer cookie = new CookieContainer();
private string getRequest(string url, CookieContainer cookie, string postData = "")
{
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();
foreach (Cookie _cookie in response.Cookies)
{
Console.WriteLine("1. Version: {0}", _cookie.Version);
Console.WriteLine("2. Value: {0}", _cookie.Value);
Console.WriteLine("3. TimeStamp: {0}", _cookie.TimeStamp);
Console.WriteLine("4. Secure: {0}", _cookie.Secure);
Console.WriteLine("5. Port: {0}", _cookie.Port);
Console.WriteLine("6. Path: {0}", _cookie.Path);
Console.WriteLine("7. Name: {0}", _cookie.Name);
Console.WriteLine("8. HttpOnly: {0}", _cookie.HttpOnly);
Console.WriteLine("9. Expires: {0}", _cookie.Expires);
Console.WriteLine("10. Expired: {0}", _cookie.Expired);
Console.WriteLine("11. Domain: {0}", _cookie.Domain);
Console.WriteLine("12. Discard: {0}", _cookie.Discard);
Console.WriteLine("13. CommentUri: {0}", _cookie.CommentUri);
Console.WriteLine("14. Comment: {0}", _cookie.Comment);
Console.WriteLine("String: {0}", _cookie.ToString());
}
return readerReadToEnd;
}
Als ich betreibe meine Anwendung, die ich mit der gleichen Instanz von cookie
arbeite. Aber wenn ich die Anwendung erneut starte, ist der Cookie anders. Ich möchte immer das selbe verwenden.
Console Ausgabe gibt mir dies:
1. Version: 0
2. Value: rujd49p08kthfcuf7itdgnhkap5jideg
3. TimeStamp: 2016-11-25 21:58:06
4. Secure: False
5. Port:
6. Path:/
7. Name: PHPSESSID
8. HttpOnly: True
9. Expires: 0001-01-01 00:00:00
10. Expired: False
11. Domain: example-site.com
12. Discard: False
13. CommentUri:
14. Comment:
String: PHPSESSID=rujd49p08kthfcuf7itdgnhkap5jideg
Also meine Frage ist: kann ich meine Cookie speichern und das gleiche Cookie zum Beispiel 1 Tag später verwenden?
Wow, danke für die Antwort. Ich frage mich, ob es eine Möglichkeit gibt, meine Cookies in der SQL-Server-Datenbank zu speichern, zum Beispiel durch Speichern als Bytes. Hast du damit Erfahrung? – Dawvawd
Es gibt eine Reihe von Möglichkeiten, wie Sie die serialisierte Darstellung in SQL speichern könnten: – bookdev
Sie würden immer noch den BinaryFormatter verwenden, aber Sie würden in einen 'MemoryStream' schreiben und dann' ToArray() 'darauf aufrufen, um das Array zu erhalten von Rohbytes der serialisierten Darstellung. Von dort können Sie es in SQL in einem 'binary' /' varbinary' Feld speichern, oder Sie können 'Convert.ToBase64String (bytes)' aufrufen, um es in einen base64 String umzuwandeln, der in einem einfachen alten 'varchar' oder 'nvarchar'-Feld und kehrte dann mit' FromBase64String() 'in die Byte-Array-Form zurück. Sie können schließlich den BinaryFormatter verwenden, um Ihren 'CookieContainer' zu einem beliebigen Stream zu serialisieren/deserialisieren. – bookdev