簡體   English   中英

Asp.Net Core 2.1請求釋放客戶端Cookie

[英]Asp.Net Core 2.1 Request exlusing client side cookies

我有一個問題,其中使用javascript在網站中設置的cookie沒有傳遞到請求中的控制器。 存在使用C#設置的所有cookie。

在我的Startup.cs中,設置了以下內容:

ConfigureServices:

services.Configure<CookiePolicyOptions>(options =>
{
    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
    options.CheckConsentNeeded = context => false;// must be false otherwise only essential cookies will be allowed
    options.MinimumSameSitePolicy = SameSiteMode.None;              
});

配置:

app.UseCookiePolicy(new CookiePolicyOptions
{
    HttpOnly = HttpOnlyPolicy.None
});

在瀏覽器中檢查cookie時,我想要的一個-“ ClientTimeZone”存在,如該圖所示:

在此處輸入圖片說明

但是在控制器中,當查看不存在Cookie的請求時:

在此處輸入圖片說明

我用於存儲cookie的JavaScript代碼如下:

setCookie: function (name, value, days)
    {
        var expires = "";
        if (days)
        {
            var date = new Date();
            date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
            expires = "; expires=" + date.toUTCString();
        }
        document.cookie = name + "=" + (value || "") + expires + ";";
    },

我也嘗試添加path=/但是沒有運氣。

關於為何cookie無法持久保存到服務器的任何建議?

謝謝,

這是由於您的cookie值(在本例中為Json)中的空格所致。 .NET Core正在使用RFC-6265 允許的字符是字母數字加~!@#$%^&*()-_+[]{}| 不允許使用空格,逗號,分號,反斜杠和引號。

最簡單的解決方法是使用Uri編碼/解碼。

設置cookie值的Javascript:

document.cookie = 'ClientTimeZone=' + encodeURIComponent("New Zealand Time") + ';path=/';

用C#讀取它:

var timeZone = System.Net.WebUtility.UrlDecode(Request.Cookies["ClientTimeZone"]);

問題的根源是將標頭值解析為cookie時:

Microsoft.Net.Http.Headers.HttpHeaderParser
{
    protected virtual bool TryParseValues(IList<string> values, bool strict, out IList<T> parsedValues)
}

最終達到以下方法,一旦遇到不允許的字符,該方法將立即退出:

Microsoft.Net.Http.Headers.CookieHeaderValue
{
    internal static StringSegment GetCookieValue(StringSegment input, ref int offset)
}

本質上,即使cookie是在請求標頭中發送的,任何不能正確解析的cookie都將被靜默忽略,並且永遠不會包含在IRequestCookieCollection Request.Cookies中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM