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的,应为这里记下的是用户最近一次访问的新闻标题,那么如果用户在几个新闻之间切换的话,那么还是不能避免恶意计数的!