本文簡單利用Cookie技術(shù)來簡單的限制點(diǎn)贊次數(shù),并不能杜絕游客的惡意點(diǎn)贊。
好了,不啰嗦了,先來看看基礎(chǔ)知識(shí):
ajax+springMVC+cookie
中間框架你隨意,樓主這里用了springMVC,只要取得HttpServletRequest和HttpServletResponse你就可以操作cookie啦
什么是Cookie
cookie 是存儲(chǔ)于訪問者的計(jì)算機(jī)中的變量。每當(dāng)同一臺(tái)計(jì)算機(jī)通過瀏覽器請(qǐng)求某個(gè)頁面時(shí),就會(huì)發(fā)送這個(gè) cookie。你可以使用 JavaScript 來創(chuàng)建和取回 cookie 的值。
第2篇閱讀中提到了cookie存放在http的request中,這為我們?cè)趈ava中操作cookie提供了可能
cookie主要用途編輯
服務(wù)器可以利用Cookies包含信息的任意性來篩選并經(jīng)常性維護(hù)這些信息,以判斷在HTTP傳輸中的狀態(tài)。Cookies最典型的應(yīng)用是判定注冊(cè)用戶是否已經(jīng)登錄網(wǎng)站,用戶可能會(huì)得到提示,是否在下一次進(jìn)入此網(wǎng)站時(shí)保留用戶信息以便簡化登錄手續(xù),這些都是Cookies的功用。另一個(gè)重要應(yīng)用場合是“購物車”之類處理。用戶可能會(huì)在一段時(shí)間內(nèi)在同一家網(wǎng)站的不同頁面中選擇不同的商品,這些信息都會(huì)寫入Cookies,以便在最后付款時(shí)提取信息。
基本了解了Cookie,我們來看看java怎么操作cookie
建立一個(gè)無生命周期的cookie,即隨著瀏覽器的關(guān)閉即消失的cookie,代碼如下:
1
2
3
4
|
HttpServletRequest request HttpServletResponse response Cookie cookie = new Cookie( "cookiename" , "cookievalue" ); response.addCookie(cookie); |
建立一個(gè)有生命周期的cookie,可以設(shè)置他的生命周期
1
2
3
4
5
6
|
cookie = new Cookie( "cookiename" , "cookievalue" ); //此方法接收一個(gè)以秒為單位的整數(shù),該整數(shù)表示cookie的最大生存期。負(fù)值表示當(dāng)關(guān)閉瀏覽器時(shí),該cookie將被清除,表示必須立即清除該cookie。 cookie.setMaxAge(); //設(shè)置路徑,這個(gè)路徑即該工程下都可以訪問該cookie 如果不設(shè)置路徑,那么只有設(shè)置該cookie路徑及其子路徑可以訪問 cookie.setPath( "/" ); response.addCookie(cookie); |
讀取cookie,讀取cookie代碼如下
1
2
3
4
5
|
Cookie[] cookies = request.getCookies(); //這樣便可以獲取一個(gè)cookie數(shù)組 for (Cookie cookie : cookies){ cookie.getName(); // get the cookie name cookie.getValue(); // get the cookie value } |
springMVC具體限制操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/** * 點(diǎn)贊操作 * * @param comment * @param request * @param response * @return */ @RequestMapping (value = TalkingConst.PATH_LOVE, method = RequestMethod.POST) public @ResponseBody Map<String, Object> love(Comment comment, HttpServletRequest request, HttpServletResponse response) { Map<String, Object> map = new HashMap<String, Object>(); // 根據(jù)cookie的name取的cookie getCookieByName()方法可以參考代碼塊上的鏈接處的封裝 Cookie cookie = getCookieByName(request, comment.getCommentId() + "" ); // 判斷cookie是否為空 if (cookie != null ) { // cookie不為空,提示已經(jīng)贊過 // 前臺(tái)傳值 map.put(TalkingConst.ATTRIBUTE_MSG, "您已贊過,請(qǐng)休息一下~" ); map.put(TalkingConst.ATTRIBUTE_NAME_RESULT, Boolean.FALSE); } else { // 數(shù)據(jù)庫操作,點(diǎn)贊個(gè)數(shù)加 commentService.love(comment); // 創(chuàng)建cookie addCookie()方法可以參考代碼塊上的鏈接處的封裝 addCookie(response, comment.getCommentId() + "" , "" , ); map.put(TalkingConst.ATTRIBUTE_NAME_RESULT, Boolean.TRUE); } return map; } |
至此,簡單的cookie限制點(diǎn)贊次數(shù)基本完成。前臺(tái)的代碼沒放因?yàn)槊總€(gè)點(diǎn)贊的樣式都不大一樣。
以上所述給大家分享了Java用Cookie限制點(diǎn)贊次數(shù)的相關(guān)知識(shí),希望對(duì)大家有所幫助。