我的C#應用程序正在網站上做一些工作。我想在每次運行我的應用程序時使用相同的cookie,而不是創建新的cookie。我想將cookie保存到數據庫或序列化它。存儲和檢索cookie
的代碼是:
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;
}
當我運行我的應用程序,我用的cookie
相同的情況下工作。但是當我再次運行應用程序時,cookie是不同的。我想總是使用同一個。
控制檯輸出給了我這樣的:
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
所以我的問題是:我能救我的cookie,並使用相同的cookie例如1天后?
哇,謝謝你的回答。我想知道是否有任何方法將我的cookie存儲在SQL Server數據庫中,例如通過保存爲字節。你有什麼經驗嗎? – Dawvawd
有很多方法可以將序列化表示存儲在SQL中: – bookdev
您仍然使用BinaryFormatter,但是您要寫入一個'MemoryStream',然後調用'ToArray()'來獲取數組序列化表示的原始字節。從那裏你可以將它存儲在SQL的'binary' /'varbinary'字段中,或者你可以調用'Convert.ToBase64String(bytes)'把它變成一個base64字符串,可以存儲在一個普通的'varchar'中,或者'nvarchar'字段,然後用'FromBase64String()'轉回到字節數組形式。您最終可以使用BinaryFormatter將您的'CookieContainer'序列化/反序列化爲任何類型的流。 – bookdev