-//\r
-// System.Web.HttpCookie.cs\r
+// \r
+// System.Web.HttpCookie\r
//\r
// Author:\r
-// Bob Smith <bob@thestuff.net>\r
-//\r
-// (C) Bob Smith\r
+// Patrik Torstensson (Patrik.Torstensson@labs2.com)\r
//\r
-\r
using System;\r
+using System.Text;\r
+using System.Web;\r
using System.Collections.Specialized;\r
\r
namespace System.Web {\r
public sealed class HttpCookie {\r
- private string _name;\r
- private string _value = null;\r
- private string _domain; //TODO: default to some pref.\r
- private DateTime _expires;\r
- private string _path; //TODO: default is the current request path.\r
- private bool _secure = false;\r
+ private string _Name;\r
+ private string _Value;\r
+ private string _Domain;\r
+ private DateTime _Expires;\r
+ private bool _ExpiresSet;\r
+ private string _Path; \r
+ private bool _Secure = false;\r
+ \r
+ private HttpValueCollection _Values;\r
+\r
+ internal HttpCookie() {\r
+ _Path = "/";\r
+ }\r
+\r
public HttpCookie(string name) {\r
- _name = name;\r
+ _Path = "/";\r
+ _Name = name;\r
}\r
+\r
public HttpCookie(string name, string value) {\r
- _name = name;\r
- _value = value;\r
+ _Name = name;\r
+ _Value = value;\r
}\r
+\r
+ HttpResponseHeader GetCookieHeader() {\r
+ StringBuilder oSetCookie = new StringBuilder();\r
+\r
+ if (null != _Name && _Name.Length > 0) {\r
+ oSetCookie.Append(_Name);\r
+ oSetCookie.Append("=");\r
+ }\r
+\r
+ if (null != _Values) {\r
+ oSetCookie.Append(_Values.ToString(false));\r
+ } else if (null != _Value) {\r
+ oSetCookie.Append(_Value);\r
+ }\r
+\r
+ if (null != _Domain && _Domain.Length > 0) {\r
+ oSetCookie.Append("; domain=");\r
+ oSetCookie.Append(_Domain);\r
+ }\r
+\r
+ if (null != _Path && Path.Length > 0) {\r
+ oSetCookie.Append("; path=");\r
+ oSetCookie.Append(_Path);\r
+ }\r
+\r
+ if (_Secure) {\r
+ oSetCookie.Append("; secure");\r
+ }\r
+\r
+ return new HttpResponseHeader(HttpWorkerRequest.HeaderSetCookie, oSetCookie.ToString());\r
+ }\r
+\r
public string Domain {\r
get {\r
- return _domain;\r
+ return _Domain;\r
}\r
set {\r
- _domain = value;\r
+ _Domain = value;\r
}\r
}\r
+\r
public DateTime Expires {\r
get {\r
- return _expires;\r
+ if (!_ExpiresSet) {\r
+ return DateTime.MinValue;\r
+ }\r
+\r
+ return _Expires;\r
}\r
+\r
set {\r
- _expires = value;\r
+ _ExpiresSet = true;\r
+ _Expires = value;\r
}\r
}\r
+\r
public bool HasKeys {\r
get {\r
- return false; //TODO\r
+ return Values.HasKeys();\r
}\r
}\r
+\r
public string this[string key] {\r
- //TODO: get/set subcookie.\r
- get {return "";}\r
- set {}\r
+ get {\r
+ return Values[key];\r
+ }\r
+ \r
+ set {\r
+ Values[key] = value;\r
+ }\r
}\r
+\r
public string Name {\r
get {\r
- return _name;\r
+ return _Name;\r
}\r
+\r
set {\r
- _name = value;\r
+ _Name = value;\r
}\r
}\r
+\r
public string Path {\r
get {\r
- return _path;\r
+ return _Path;\r
}\r
+\r
set {\r
- _path = value;\r
+ _Path = value;\r
}\r
}\r
+\r
public bool Secure {\r
get {\r
- return _secure;\r
+ return _Secure;\r
}\r
set {\r
- _secure = value;\r
+ _Secure = value;\r
}\r
}\r
+\r
public string Value {\r
get {\r
- return _value;\r
+ if (null != _Values) {\r
+ return _Values.ToString(false);\r
+ }\r
+ \r
+ return _Value;\r
}\r
set {\r
- _value = value;\r
+ if (null != _Values) {\r
+ _Values.Reset();\r
+ _Values.Add(null, value);\r
+ return;\r
+ }\r
+\r
+ _Value = value;\r
}\r
}\r
+\r
public NameValueCollection Values {\r
- //TODO\r
- get {return null;}\r
+ get {\r
+ if (null == _Values) {\r
+ _Values = new HttpValueCollection();\r
+ if (null != _Value) {\r
+ // Do we have multiple keys\r
+ if (_Value.IndexOf("&") >= 0 || _Value.IndexOf("=") >= 0) {\r
+ _Values.FillFromCookieString(_Value);\r
+ } else {\r
+ _Values.Add(null, _Value);\r
+ }\r
+\r
+ _Value = null;\r
+ }\r
+ }\r
+\r
+ return _Values;\r
+ }\r
}\r
}\r
}\r