f53cdc7ce94c5ae42ae55d2443b160396f2fefc8
[mono.git] / mcs / class / System.Web / System.Web / HttpCookie.cs
1 // \r
2 // System.Web.HttpCookie\r
3 //\r
4 // Author:\r
5 //   Patrik Torstensson (Patrik.Torstensson@labs2.com)\r
6 //\r
7 using System;\r
8 using System.Text;\r
9 using System.Web;\r
10 using System.Collections.Specialized;\r
11 \r
12 namespace System.Web {\r
13    public sealed class HttpCookie {\r
14       private string _Name;\r
15       private string _Value;\r
16       private string _Domain;\r
17       private DateTime _Expires;\r
18       private bool _ExpiresSet;\r
19       private string _Path;  \r
20       private bool _Secure = false;\r
21       \r
22       private HttpValueCollection _Values;\r
23 \r
24       internal HttpCookie() {\r
25          _Path = "/";\r
26       }\r
27 \r
28       public HttpCookie(string name) {\r
29          _Path = "/";\r
30          _Name = name;\r
31       }\r
32 \r
33       public HttpCookie(string name, string value) {\r
34          _Name = name;\r
35          _Value = value;\r
36       }\r
37 \r
38       HttpResponseHeader GetCookieHeader() {\r
39          StringBuilder oSetCookie = new StringBuilder();\r
40 \r
41          if (null != _Name && _Name.Length > 0) {\r
42             oSetCookie.Append(_Name);\r
43             oSetCookie.Append("=");\r
44          }\r
45 \r
46          if (null != _Values) {\r
47             oSetCookie.Append(_Values.ToString(false));\r
48          } else if (null != _Value) {\r
49             oSetCookie.Append(_Value);\r
50          }\r
51 \r
52          if (null != _Domain && _Domain.Length > 0) {\r
53             oSetCookie.Append("; domain=");\r
54             oSetCookie.Append(_Domain);\r
55          }\r
56 \r
57          if (null != _Path && Path.Length > 0) {\r
58             oSetCookie.Append("; path=");\r
59             oSetCookie.Append(_Path);\r
60          }\r
61 \r
62          if (_Secure) {\r
63             oSetCookie.Append("; secure");\r
64          }\r
65 \r
66          return new HttpResponseHeader(HttpWorkerRequest.HeaderSetCookie, oSetCookie.ToString());\r
67       }\r
68 \r
69       public string Domain {\r
70          get {\r
71             return _Domain;\r
72          }\r
73          set {\r
74             _Domain = value;\r
75          }\r
76       }\r
77 \r
78       public DateTime Expires {\r
79          get {\r
80             if (!_ExpiresSet) {\r
81                return DateTime.MinValue;\r
82             }\r
83 \r
84             return _Expires;\r
85          }\r
86 \r
87          set {\r
88             _ExpiresSet = true;\r
89             _Expires = value;\r
90          }\r
91       }\r
92 \r
93       public bool HasKeys {\r
94          get {\r
95             return Values.HasKeys();\r
96          }\r
97       }\r
98 \r
99       public string this[string key] {\r
100          get {\r
101             return Values[key];\r
102          }\r
103          \r
104          set {\r
105             Values[key] = value;\r
106          }\r
107       }\r
108 \r
109       public string Name {\r
110          get {\r
111             return _Name;\r
112          }\r
113 \r
114          set {\r
115             _Name = value;\r
116          }\r
117       }\r
118 \r
119       public string Path {\r
120          get {\r
121             return _Path;\r
122          }\r
123 \r
124          set {\r
125             _Path = value;\r
126          }\r
127       }\r
128 \r
129       public bool Secure {\r
130          get {\r
131             return _Secure;\r
132          }\r
133          set {\r
134             _Secure = value;\r
135          }\r
136       }\r
137 \r
138       public string Value {\r
139          get {\r
140             if (null != _Values) {\r
141                return _Values.ToString(false);\r
142             }\r
143             \r
144             return _Value;\r
145          }\r
146          set {\r
147             if (null != _Values) {\r
148                _Values.Reset();\r
149                _Values.Add(null, value);\r
150                return;\r
151             }\r
152 \r
153             _Value = value;\r
154          }\r
155       }\r
156 \r
157       public NameValueCollection Values {\r
158          get {\r
159             if (null == _Values) {\r
160                _Values = new HttpValueCollection();\r
161                if (null != _Value) {\r
162                   // Do we have multiple keys\r
163                   if (_Value.IndexOf("&") >= 0 || _Value.IndexOf("=") >= 0) {\r
164                      _Values.FillFromCookieString(_Value);\r
165                   } else {\r
166                      _Values.Add(null, _Value);\r
167                   }\r
168 \r
169                   _Value = null;\r
170                }\r
171             }\r
172 \r
173             return _Values;\r
174          }\r
175       }\r
176    }\r
177 }\r