mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 11:44:58 +08:00
Updating spec test cookie handling to support removing and updating existing cookies
--HG-- branch : dev
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web;
|
||||
using System.Web.Hosting;
|
||||
using Orchard.Specs.Util;
|
||||
@@ -45,7 +46,28 @@ namespace Orchard.Specs.Hosting {
|
||||
string setCookie;
|
||||
if (details.ResponseHeaders.TryGetValue("Set-Cookie", out setCookie)) {
|
||||
Trace.WriteLine(string.Format("Set-Cookie: {0}", setCookie));
|
||||
webHost.Cookies = (webHost.Cookies + ';' + setCookie.Split(';').FirstOrDefault()).Trim(';');
|
||||
var cookieName = setCookie.Split(';')[0].Split('=')[0];
|
||||
DateTime expires;
|
||||
if (!string.IsNullOrEmpty(webHost.Cookies)
|
||||
&& setCookie.Contains("expires=")
|
||||
&& DateTime.TryParse(setCookie.Split(new[] { "expires=" }, 2, StringSplitOptions.None)[1].Split(';')[0], out expires)
|
||||
&& expires < DateTime.Now) {
|
||||
// remove
|
||||
Trace.WriteLine(string.Format("Removing cookie: {0}", cookieName));
|
||||
webHost.Cookies = Regex.Replace(webHost.Cookies, string.Format("{0}=[^;]*;?", cookieName), "");
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(webHost.Cookies)
|
||||
&& Regex.IsMatch(webHost.Cookies, string.Format("\b{0}=", cookieName))) {
|
||||
// replace
|
||||
Trace.WriteLine(string.Format("Replacing cookie: {0}", cookieName));
|
||||
webHost.Cookies = Regex.Replace(webHost.Cookies, string.Format("{0}=[^;]*(;?)", cookieName), string.Format("{0}$1", setCookie.Split(';')[0]));
|
||||
}
|
||||
else {
|
||||
// add
|
||||
Trace.WriteLine(string.Format("Adding cookie: {0}", cookieName));
|
||||
webHost.Cookies = (webHost.Cookies + ';' + setCookie.Split(';').FirstOrDefault()).Trim(';');
|
||||
}
|
||||
Trace.WriteLine(string.Format("Cookie jar: {0}", webHost.Cookies));
|
||||
}
|
||||
|
||||
return details;
|
||||
|
Reference in New Issue
Block a user