将字符串分配给document.cookie时丢失cookie数据

问题描述

我在Angular / MVC应用程序的客户端上处理cookie时遇到问题。 Cookie包含多个密钥,其中一些可以由用户更改。

当我将cookie字符串分配给document.cookie时,部分cookie仍然保留(第一个键/值对),而其余部分消失在cookie本身中。

.NET代码,用于更改cookie服务器端(我将在此处修改值,它们在实际应用中更有意义):

private void SetCookieData(string value1,string value2) // cookie also contains a CustomerId,but that doesn't change
{
    HttpCookie cookie = Request.Cookies["MyCookie"];
    cookie.SameSite = SameSiteMode.Lax;
    cookie.Values["Val1"] = value1;
    cookie.Values["Val2"] = value2;

    cookie.Expires = DateTime.Now.AddDays(7);

    cookie.HttpOnly = false;
    Response.Cookies.Add(cookie);
}

客户端代码(每当用户更改Val1或Val2时触发):

setMyCookie(cookieName: string,cookieValue: string): void {
    this.myCookie[cookieName] = cookieValue;

    const cookieKeys = Object.keys(this.myCookie);
    console.log('cookie keys: ',cookieKeys);
    
    let cookieString = '';
    cookieKeys.forEach(key => cookieString += key + '=' + this.myCookie[key] + '&');
    cookieString = 'MyCookie=' + cookieString.substr(0,cookieString.length - 1);

    const dateExpires: Date = new Date(new Date().getTime() + 7 * 1000 * 60 * 60 * 24); // 7 days
    cookieString = cookieString + ';expires=' + dateExpires.toUTCString();
    cookieString = cookieString + ';path=/';
    cookieString = cookieString + ';samesite=Lax;';

    console.log('cookie string: ',cookieString);
    console.log('document.cookie before: ',document.cookie);

    document.cookie = cookieString;

    console.log('document.cookie after: ',document.cookie);
}

在设置Cookie之前和之后注意console.log语句。输出为:

cookie字符串:MyCookie = CustomerId = 001; ai_user&Val1 = Value1&Val2 = Value2; expires = 2020年9月17日星期四08:04:31 GMT; path = /; samesite = Lax;

document.cookie之前:ai_user = 89tFp | 2020-09-10T08:04:28.537Z; ai_session = kHOmj | 1599725068599.04 | 1599725068599.04; MyCookie = CustomerId = 001&Val1 = Value1&Val2 = Value2

document.cookie之后:ai_user = 89tFp | 2020-09-10T08:04:28.537Z; ai_session = kHOmj | 1599725068599.04 | 1599725068599.04; MyCookie = CustomerId = 001

请注意,Val1和Val2完全丢失。可能与格式化cookieString有关吗?有帮助吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)