Skip to content
This repository was archived by the owner on Nov 20, 2018. It is now read-only.

Commit 690e5a6

Browse files
committed
Set default path=/ when removing cookie
1 parent cb3e9b1 commit 690e5a6

File tree

2 files changed

+47
-30
lines changed

2 files changed

+47
-30
lines changed

src/Microsoft.AspNet.Http/ResponseCookies.cs

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -80,36 +80,7 @@ public void Append(string key, string value, CookieOptions options)
8080
/// <param name="key"></param>
8181
public void Delete(string key)
8282
{
83-
var encodedKeyPlusEquals = UrlEncoder.Default.Encode(key) + "=";
84-
Func<string, string, bool> predicate = (value, encKeyPlusEquals) => value.StartsWith(encKeyPlusEquals, StringComparison.OrdinalIgnoreCase);
85-
86-
StringValues deleteCookies = $"{encodedKeyPlusEquals}; expires=Thu, 01-Jan-1970 00:00:00 GMT";
87-
var existingValues = Headers[HeaderNames.SetCookie];
88-
if (StringValues.IsNullOrEmpty(existingValues))
89-
{
90-
Headers[HeaderNames.SetCookie] = deleteCookies;
91-
}
92-
else
93-
{
94-
var values = existingValues.ToArray();
95-
var newValues = new List<string>();
96-
97-
for (var i = 0; i < values.Length; i++)
98-
{
99-
if (!predicate(values[i], encodedKeyPlusEquals))
100-
{
101-
newValues.Add(values[i]);
102-
}
103-
}
104-
105-
values = deleteCookies.ToArray();
106-
for (var i = 0; i < values.Length; i++)
107-
{
108-
newValues.Add(values[i]);
109-
}
110-
111-
Headers[HeaderNames.SetCookie] = new StringValues(newValues.ToArray());
112-
}
83+
Delete(key, new CookieOptions() { Path = "/" });
11384
}
11485

11586
/// <summary>
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using Xunit;
5+
using Microsoft.Net.Http.Headers;
6+
using Microsoft.AspNet.Http.Internal;
7+
8+
namespace Microsoft.AspNet.Http.Tests
9+
{
10+
public class ResponseCookiesTest
11+
{
12+
[Fact]
13+
public void DeleteCookieShouldSetDefaultPath()
14+
{
15+
var headers = new HeaderDictionary();
16+
var cookies = new ResponseCookies(headers);
17+
var testcookie = "TestCookie";
18+
19+
cookies.Delete(testcookie);
20+
21+
var cookieHeaderValues = headers[HeaderNames.SetCookie];
22+
Assert.Equal(1, cookieHeaderValues.Count);
23+
Assert.StartsWith(testcookie, cookieHeaderValues[0]);
24+
Assert.Contains("path=/", cookieHeaderValues[0]);
25+
Assert.Contains("expires=Thu, 01 Jan 1970 00:00:00 GMT", cookieHeaderValues[0]);
26+
}
27+
28+
[Fact]
29+
public void NoParamsDeleteRemovesCookieCreatedByAdd()
30+
{
31+
var headers = new HeaderDictionary();
32+
var cookies = new ResponseCookies(headers);
33+
var testcookie = "TestCookie";
34+
35+
cookies.Append(testcookie, testcookie);
36+
cookies.Delete(testcookie);
37+
38+
var cookieHeaderValues = headers[HeaderNames.SetCookie];
39+
Assert.Equal(1, cookieHeaderValues.Count);
40+
Assert.StartsWith(testcookie, cookieHeaderValues[0]);
41+
Assert.Contains("path=/", cookieHeaderValues[0]);
42+
Assert.Contains("expires=Thu, 01 Jan 1970 00:00:00 GMT", cookieHeaderValues[0]);
43+
}
44+
45+
}
46+
}

0 commit comments

Comments
 (0)