会话技术Cookie
生活随笔
收集整理的這篇文章主要介紹了
会话技术Cookie
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.會話技術(shù)的概念
- 會話∶瀏覽器和服務(wù)器之間的多次請求和響應(yīng)。
- 為了實(shí)現(xiàn)一些功能,瀏覽器和服務(wù)器之間可能會產(chǎn)生多次的請求和響應(yīng),從瀏覽器訪問服務(wù)器開始,到訪問服務(wù)器結(jié)束(關(guān)閉瀏覽器、到了過期時間)。這期問產(chǎn)生的多次請求和響應(yīng)加在一起就稱之為瀏覽器和服務(wù)器之間的一次會話。
- 會話過程中所產(chǎn)生的一些數(shù)據(jù),可以通過會話技術(shù)( Cookie和Session )保存。
2.Cookie的概念
- Cookie :客戶端會話管理技術(shù)把要共享的數(shù)據(jù)保存到客戶端。
- 每次請求時,把會話信息帶到服務(wù)器端,從而實(shí)現(xiàn)多次請求的數(shù)據(jù)共享!
- 作用:可以保存客戶端訪問網(wǎng)站的相關(guān)內(nèi)容,從而保證每次訪問時先從本地緩存中就取,以此提高效率
- -cookie有大小和個數(shù)限制:每個網(wǎng)站最多只能存20個Cookie,所有網(wǎng)站加起來最多只能存300個Cookie。每個Cookie的大小不能超過4KB
3.Cookie的添加和獲取
//cookie把數(shù)據(jù)保存在客戶端 //Session把數(shù)據(jù)保存在服務(wù)端,且依賴于cookie @WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//設(shè)置請求字符編碼,防止亂碼req.setCharacterEncoding("utf-8");//設(shè)置瀏覽器響應(yīng)編碼[html類型的文本,字符集為utf-8]resp.setContentType("text/html;charset=utf-8");//1.通過響應(yīng)對象寫出提示信息PrintWriter pw = resp.getWriter();pw.write("最后瀏覽時間為<br/>");//2.創(chuàng)建Cookie對象,用于記錄最后訪問時間Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");//3.設(shè)置最大存活時間cookie.setMaxAge(3600);//4.將cookie對象添加到客戶端resp.addCookie(cookie);//5.獲取cookieCookie[] cookies = req.getCookies();for (Cookie c : cookies) {//if("time".equals(c.getName())){if(c.getName().equals("time")){String value = c.getValue();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");pw.write(sdf.format(new Date(Long.parseLong(value))));}}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }4.Cookie的路徑限制
【取自第一次訪問的資源路徑前綴,只要以這個前綴為開頭(包括子級路徑)。獲取到反之獲取不到】
@WebServlet("/servlet/aaa/ServletDemo4")可以獲取到
@WebServlet("/bbb/servlet/ServletDemo5")不可以獲取
5.例子:最后瀏覽時間
@WebServlet("/ServletDemo2") public class ServletDemo2 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//設(shè)置請求字符編碼,防止亂碼req.setCharacterEncoding("utf-8");//設(shè)置瀏覽器響應(yīng)編碼[html類型的文本,字符集為utf-8]resp.setContentType("text/html;charset=utf-8");//1.獲取所有的Cookie對象//需要加非空判斷PrintWriter pw = resp.getWriter();Cookie[] cookies = req.getCookies();if(cookies==null){//如果為空,說明第一次訪問,使用Cookie記錄這一次訪問的時間Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");cookie.setMaxAge(3);resp.addCookie(cookie);pw.write("歡迎光臨,第一次訪問");return;}//2.查找lasttime名稱的Cookie是否存在int index = -1;for (int i = 0; i < cookies.length; i++) {//可以加個cookies[i]判空if (cookies[i].getName().equals("lasttime")) {index = i;break;}}//如果不存在,說明第一次訪問,使用Cookie記錄這一次訪問的時間if (index == -1) {Cookie cookie = new Cookie("lasttime", System.currentTimeMillis() + "");cookie.setMaxAge(3);resp.addCookie(cookie);pw.write("歡迎光臨,第一次訪問");}//如果存在,說明不是第一次訪問,使用Cookie響應(yīng)給瀏覽器這一次的時間if (index != -1) {String value = cookies[index].getValue();SimpleDateFormat sdt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");pw.write("歡迎回來,上次訪問時間</br>" + sdt.format(new Date(Long.parseLong(value))));//并設(shè)置新時間cookies[index].setValue(System.currentTimeMillis() + "");resp.addCookie(cookies[index]);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);} }總結(jié)
以上是生活随笔為你收集整理的会话技术Cookie的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沈阳到营口多少公里
- 下一篇: 会话技术Session