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的,應為這裡記下的是使用者最近一次訪問的新聞標題,那麼如果使用者在幾個新聞之間切換的話,那麼還是不能避免惡意計數的!