最近浏览的Cookie

时间:2015-04-20 15:32:44

标签: c# razor cookies webmatrix

我正在尝试创建一个存储用户可以查看的属性列表的cookie。

我已经创建了一个测试,它可以部分运行。目前,每次我访问一个页面时,它都会从URL中提取属性ID,并创建一个包含该URL的新字符串,如果cookie已经存在,它会将该属性ID附加到该URL。

@{
    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中输入1个该ID。我如何检查,将其转换为数组?

1 个答案:

答案 0 :(得分:2)

Enumerable.Distinct将确保您没有重复项。

类似的东西:

 var newCookieValue = 
        String.Join(".",          
           currentCookieValue.Split(new Char[] {'.'}).Distinct());

要将最新内容添加到最后 - 一个选项是首先删除并稍后添加:

 ....
    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添加任意数量的项目。