分享
 
 
 

JavaWeb学习总结第五篇--认识Cookie机制

王朝学院·作者佚名  2016-05-28
窄屏简体版  字體: |||超大  

javaWeb学习总结第五篇--认识Cookie机制Cookie机制

前言会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie和session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。今天,我首先给大家讲解一下Cookie机制,后面我会给大家提到Session的。

什么是CookieWeb应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要新的连接。这就意味着服务器无法从连接上跟踪会话。即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话。所以,要跟踪会话,我们必须引入一种机制。此时,我们就给客户端们颁发一个通行证,无论谁访问都必须出示通行证也就是身份卡。这样服务器就可以通过这个身份卡辨别出身份了。这就是Cookie的工作原理。

我们还可以查看网站颁发的Cookie,只需要在网址栏中输入javascript:alert(document.cookie)就可以了。

记录用户访问次数Java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie对象来对客户端Cookie进行操作,通过request.getCookie()获取客户端提交的所有Cookie,通过response.addCookie(Cookie cookie)向客户端设置Cookie。

Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。

以下代码就是使用Cookie来记录用户账号以及登陆次数的例子。

1 <%@ page import="java.util.Date" %> 2 <%@ page import="java.text.SimpleDateFormat" %> 3 <%-- 4 Created by IntelliJ IDEA. 5 User: Administrator 6 Date: 2015/6/17 7 Time: 11:58 8 To change this template use File | Settings | File Templates. 9 --%>10 <%@ page contentType="text/html;charset=UTF-8" language="java" %>11 <%12 request.setCharacterEncoding("UTF-8");13 14 String username = "";15 int visitTimes = 0;16 17 Cookie[] cookies = request.getCookies();18 19 for (int i = 0; cookies != null && i < cookies.length; i++) {20 Cookie cookie = cookies[i];21 if ("username".equals(cookie.getName())) {22 username = cookie.getValue();23 } else if ("visitTimes".equals(cookie.getName())) {24 visitTimes = Integer.parseInt(cookie.getValue());25 }26 }27 if (username == null || username.trim().equals("")) {28 throw new Exception("请先登录");29 }30 Cookie visitTimesCookie = new Cookie("visitTimes",Integer.toString(++visitTimes));31 response.addCookie(visitTimesCookie);32 %>33 <html>34 <head>35 <title></title>36 </head>37 <body>38 <div align="center" style="margin:10px; ">39 <fieldset>40 <legend>登录信息 当前时间:<%= new Date() %></legend>41 <form action="login.jsp" method="post">42 <table>43 <tr>44 <td>您的账号: </td>45 <td><%= username %></td>46 </tr>47 <tr>48 <td>登录次数: </td>49 <td><%= visitTimes %></td>50 </tr>51 <tr>52 <td></td>53 <td>54 <input type="button" value="刷 新" onclick="location='<%=request.getRequestURI()%>?ts=' + new55 Date().getTime(); " class="button">56 </td>57 </tr>58 </table>59 </form>60 </fieldset>61 </div>62 </body>63 </html>

如果没有找到包含username属性的Cookie,则抛出异常,页面跳转到登陆页面login.jsp。

1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator 4 Date: 2015/6/17 5 Time: 12:14 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <%10 request.setCharacterEncoding("UTF-8");11 response.setCharacterEncoding("UTF-8");12 13 if ("POST".equals(request.getMethod())) {14 Cookie usernameCookie = new Cookie("username",request.getParameter("username"));15 Cookie visitTimesCookie = new Cookie("visitTimes","0");16 17 response.addCookie(usernameCookie);18 response.addCookie(visitTimesCookie);19 20 response.sendRedirect(request.getContextPath() + "/cookie.jsp");21 return ;22 }23 %>24 <html>25 <head>26 <title>请先登录</title>27 </head>28 <body>29 <div align="center" style="margin:10px; ">30 <fieldset>31 <legend>登录</legend>32 <form action="login.jsp" method="post">33 <table>34 <tr>35 <td>账号: </td>36 <td><input type="text" name="username" style="width:200px; "></td>37 </tr>38 <tr>39 <td>密码: </td>40 <td><input type="passWord" name="password" style="width:200px; "</td>41 </tr>42 <tr>43 <td></td>44 <td><input type="submit" value="登 录" class="button"</td>45 </tr>46 </table>47 </form>48 </fieldset>49 </div>50 </body>51 </html>

另外,Cookie还具有以下一些特点:

不可跨域名性,Google和Baidu的Cookie是分开的,各自访问时显示的是各自的Cookie。Cookie中保存中文只能编码Cookie中可以保存二进制数据,比如使用数字证书下面的程序使用UTF-8编码了Cookie内容,然后再使用UTF-8解码Cookie并显示出来。

1 <%-- 2 Created by IntelliJ IDEA. 3 User: Administrator 4 Date: 2015/6/17 5 Time: 13:41 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 9 <jsp:directive.page import="java.net.URLEncoder"/>10 <jsp:directive.page import="java.net.URLDecoder"/>11 <%12 Cookie cookie = new Cookie(13 URLEncoder.encode("姓名","UTF-8"),14 URLEncoder.encode("天才白痴梦","UTF-8"));15 response.addCookie(cookie);16 %>17 <html>18 <head>19 <title>Cookie Encoding</title>20 </head>21 <body>22 <%23 if (request.getCookies() != null) {24 for (Cookie cc : request.getCookies()) {25 String cookieName = URLDecoder.decode(cc.getName(),"UTF-8");26 String cookieValue = URLDecoder.decode(cc.getValue(),"UTF-8");27 28 out.PRintln(cookieName + " : " + cookieValue + "; <br/>");29 }30 }31 else {32 out.println("Cookie 已经写入客户端,请刷新页面。");33 }34 %>35 </body>36 </html>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有