如何解决将字符串分配给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);
}
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 举报,一经查实,本站将立刻删除。