我正在尝试创建一个cookie,用于存储用户查看的属性列表。
我已经创建了一个测试,它在一定程度上可以工作。目前,每当我访问一个页面时,它都会从URL中提取属性ID,然后创建一个包含该URL的新字符串,如果cookie已经存在,它会将该属性ID附加到它上面。
@{
var rPropertyId = UrlData[0].AsInt();
if(rPropertyId > 0){
if (Request.Cookies["viewed_properties"] != null){
var value = Request.Cookies["viewed_properties"].Value.ToString();
var value1 = value + "." + rPropertyId;
var newcookievalue = String.Join(".", value1.Split(new Char[] {'.'}).Distinct());
Response.Cookies["viewed_properties"].Value = newcookievalue;
Response.Cookies["viewed_properties"].Expires = DateTime.Now.AddYears(1);
} else {
Response.Cookies["viewed_properties"].Value = rPropertyId.ToString();
Response.Cookies["viewed_properties"].Expires = DateTime.Now.AddYears(1);
}
}
}
@if (Request.Cookies["viewed_properties"] != null){
var mylist = Request.Cookies["viewed_properties"].Value.Split(new Char[] {'.'});
foreach (var i in mylist)
{
<p>@i</p>
}
}这个过程没有考虑到的是,如果用户多次访问同一属性,我仍然希望在cookie中只有该ID的一个条目。我怎么检查它,把它转换成数组呢?
发布于 2015-04-20 23:40:45
Enumerable.Distinct将确保您没有重复的内容。
类似于:
var newCookieValue =
String.Join(".",
currentCookieValue.Split(new Char[] {'.'}).Distinct());要将latest添加到end -一个选项是先删除,然后添加:
....
currentCookieValue.Split(new Char[] {'.'})
.Where(s => s != newStringValueToAdd)
.Distinct()
.ToList()
.Add(newStringValueToAdd)附注: cookie值具有相对较小的长度限制(What is the maximum size of a web browser's cookie's key?),因此在向单个cookie中添加任意数量的项时要小心。
https://stackoverflow.com/questions/29752189
复制相似问题