日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

servlet session 跟踪用户上次访问时间

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 servlet session 跟踪用户上次访问时间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、是什么? 上次訪問時間;即用戶最近一次登錄時間;?

2、為什么? 為了提示用戶登錄或訪問記錄,提高安全性,如qq登錄提示;?

3、怎么做? 通過cookie 實現; 用戶第1次登錄, 服務器把訪問時間放入cookie 并作為響應報文返回瀏覽器,瀏覽器將cookie 存入磁盤,每次(除第一次外)訪問都帶上她;

補充: 本文在cookie中存儲了訪問時間,若業務場景需要,可以存儲其他數據;??

【荔枝】(轉自張孝祥)

// 跟蹤上次客戶訪問時間 public class AccessTimeServlet extends HttpServlet {public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{response.setContentType("text/html;charset=gb2312");PrintWriter out = response.getWriter();//獲取記錄用戶上次訪問站點時間的CookieCookie [] cks = request.getCookies();String lastAccessTime = getCookie(cks,"access_time");if(lastAccessTime == null){out.println("沒有您上次的訪問記錄");}else{BASE64Decoder decoder = new BASE64Decoder();String decodedAccessTime = new String(decoder.decodeBuffer(lastAccessTime),"GB2312");out.println("您上次的訪問時間為" + decodedAccessTime);}//將用戶開始本次訪問的時間存儲到客戶端Cookie中HttpSession session = request.getSession();if(session.isNew()){long createTime = session.getCreationTime();Date dateCreateTime = new Date(createTime);SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd HH點mm分ss秒");String formatedCreateTime = sdf.format(dateCreateTime);BASE64Encoder encoder = new sun.misc.BASE64Encoder();String base64CreateTime = encoder.encode(formatedCreateTime.getBytes("GB2312"));Cookie ckAccessTime = new Cookie("access_time",base64CreateTime);ckAccessTime.setMaxAge(365*24*3600);out.println(formatedCreateTime);response.addCookie(ckAccessTime);}}private String getCookie(Cookie [] cks,String cookieName){String cookieValue = null;for(int i=0; cks!=null && i<cks.length; i++){if(cookieName.equals(cks[i].getName())){cookieValue = cks[i].getValue();break;} } return cookieValue;} }

4、訪問效果

第1次, cookie中沒有儲存 最近一次訪問的記錄;?

第2次訪問,及其以后 ; 因為第1次服務器已經把 訪問時間存入cookie, 瀏覽器將cookie存入本地文件了;所以后續的訪問,瀏覽器請求報文頭都會帶上服務器返回的cookie 數據;

?

5、為什么 訪問時間access_time 看起來不對勁呢。

因為 access_time 字段值包含中文,如果不經過BASE64編碼,那經過網絡傳輸,可能會丟數據;?

所以 該字段經過 BASE64 編碼過,這里要注意,? BASE64 不是加密算法,而是編碼格式,如UTF-8 GBK 編碼格式,兩者有本質區別

base64 是什么??Base64 是一種基于 64 個可打印字符來表示二進制數據的表示方法。目前 Base64 已經成為網絡上常見的傳輸 8 位二進制字節代碼的編碼方式之一。

base64 為什么?

我們知道在計算機中任何數據都是按ascii碼存儲的,而ascii碼的128~255之間的值是不可見字符。 而在網絡上交換數據時,比如說從A地傳到B地,往往要經過多個路由設備, 由于不同的設備對字符的處理方式有一些不同,這樣那些不可見字符就有可能被處理錯誤,這是不利于傳輸的。 所以就先把數據先做一個Base64編碼,統統變成可見字符,這樣出錯的可能性就大降低了。

base64 怎么做???

它的編碼過程如下: 步驟1:將待轉換的字符串每三個字節分為一組,每個字節占 8 個二進制位,那么共有 24 個二進制位。 步驟2:將第(1)步得到的每 24 個二進制位分為每 6 個一組,則每 3 個字節可分為 4 組。 步驟3:在每組前面添加兩個 0 ,每組由 6 個二進制位變為 8 個二進制位,總共 32 個二進制位,即四個字節。根據 Base64編碼對照表(見下表)獲得對應的值。

關于 base64 更多信息,可以參考??https://blog.csdn.net/PacosonSWJTU/article/details/109955148?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的servlet session 跟踪用户上次访问时间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。