DataTable dt = bll.GetNewsByID(id);//根据ID获取的新闻详细内容 if (dt != null && dt.Rows.Count > 0) { //点击量修改的方案 string title = dt.Rows[0]["title"].ToString(); //判断是否存在 cookie HttpCookie cookie = context.Request.Cookies["NewsTitle"]; if (cookie == null) { //新建一个cookie cookie = new HttpCookie("NewsTitle"); cookie.Value = title; cookie.Expires.AddHours(1); context.Response.Cookies.Add(cookie); bll.UpdClicks(id); //修改读取到的数据里面的点击量 +1 dt.Rows[0]["clickNum"] = Convert.ToInt32(dt.Rows[0]["clickNum"]) + 1; } else { //判断cookie 的值是否是当前新闻的标题,如果不是,则没有访问过,点击量加1 if (cookie.Value != title) { bll.UpdClicks(id); //修改读取到的数据里面的点击量 +1 dt.Rows[0]["clickNum"] = Convert.ToInt32(dt.Rows[0]["clickNum"]) + 1; cookie.Value = title; context.Response.Cookies.Add(cookie); } } res.State = APIState.OK; res.Data = dt; }
我这里主要使用cookie的方式来实现这样一个新闻点击后计数加1,这样的方式其实是有一定的BUG的,应为这里记下的是用户最近一次访问的新闻标题,那么如果用户在几个新闻之间切换的话,那么还是不能避免恶意计数的!
时间: 2024-10-06 14:24:10