您现在的位置:首页 >> 基础 >> Java编程 >> 内容

Cookies机制,记录用户访问次数

时间:2021-4-14 22:55:14

  核心提示:v\:* {behavior:url(#default#VML);}o\:* {behavior:url(#default#VML);}w\:* {behavior:url(#default#VML)...

Java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie类对象对客户端Cookie进行操作。通过request.getCookie()获取客户端提交的所有Cookie(以Cookie[]数组形式返回),通过response.addCookie(Cookie cookie)向客户端设置Cookie

Cookie对象使用key-value属性对的形式保存用户状态,一个Cookie对象保存一个属性对,一个request或者response同时使用多个Cookie。因为Cookie类位于包javax.servlet.http.*下面,所以JSP中不需要import该类。

看一个使用Cookie记录用户账号以及登录次数的例子。在MyEclipse中新建Web Project,选择Java EE 5.0规范,填写项目名称为sessionWeb。新建JSP页面cookie.jsp,输入源代码如下:

代码5.1  cookie.jsp

<%@ page language="java" pageEncoding="UTF-8" errorPage="login.jsp" %>

<%

    request.setCharacterEncoding("UTF-8");              // 设置request编码

    String username = "";                               // 用户名

    int visitTimes = 0;                                 // 访问次数

   

    Cookie[] cookies = request.getCookies();            // 所有的Cookie 

    for(int i=0; cookies!=null&&i<cookies.length; i++){
                                            //
遍历Cookie寻找账号与登录次数

        Cookie cookie = cookies[i];         // iCookie

        if("username".equals(cookie.getName())){// 如果Cookie名为username

            username = cookie.getValue();       // 则记录该Cookie的内容

        }

        else if("visitTimes".equals(cookie.getName())){
                                            //
如果Cookie名为visitTimes

            visitTimes = Integer.parseInt(cookie.getValue());
                                            //
则记录Cookie的内容

        }

    }

    if(username == null || username.trim().equals("")){
                                            //
如果没有找到用户名,则转到登录界面

        throw new Exception("您还没有登录。请先登录");

    }

    // 修改 Cookie,更新用户的访问次数

    Cookie visitTimesCookie = new Cookie("visitTimes", Integer.toString
    (++visitTimes));

    response.addCookie(visitTimesCookie);   // 覆盖名为visitTimesCookie

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<body>

<div align="center" style="margin:10px; ">

    <fieldset>

        <legend>登录信息</legend>

        <form action="login.jsp" method="post">

            <table>

                <tr>

                    <td>您的账号: </td>

                    <td><%= username %></td>

                </tr>

                <tr>

                    <td>登录次数: </td>

                    <td><%= visitTimes %></td>

                </tr>

                <tr>

                    <td></td>

                    <td>

                        <input type="button" value="   " onclick=
                        "location='<%= request.getRequestURI() %>?ts=' +
                        new Date().getTime(); " class="button">

                    </td>

                </tr>

            </table>

        </form>

    </fieldset>

</div>

</body>

</html>

程序使用Cookie记录用户的访问次数。如果用户没有登录,则显示登录界面。工作原理是程序先检查Cookie,如果没有找到包含username属性的Cookie,则抛出异常,页面跳转到errorPage指定的错误处理页面login.jsplogin.jsp源代码如下:

代码5.2  login.jsp

<%@ page language="java" pageEncoding="UTF-8" isErrorPage="true" %>

<%

    request.setCharacterEncoding("UTF-8");      // 设置request编码方式

    response.setCharacterEncoding("UTF-8"); // 设置response编码方式

    if("POST".equals(request.getMethod())){ // 如果是以POST方式登录

       

        Cookie usernameCookie =                 // 新建名为usernameCookie

        new Cookie("username", request.getParameter("username"));

        Cookie visittimesCookie = new Cookie("visitTimes", "0");
                                                //
新建Cookie

               

        response.addCookie(usernameCookie); // 添加到response

        response.addCookie(visittimesCookie);   // response会将Cookie发送
                &nbs, p;                                 
给客户端

       

        response.sendRedirect(request.getContextPath() + "/cookie.jsp");    // 显示Cookie页面

        return;

    }

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>请先登录</title>

<link rel="stylesheet" type="text/css" href="css/style.css">

</head>

<body>

<div align="center" style="margin:10px; ">

    <fieldset>

        <legend>登录</legend>

        <form action="login.jsp" method="post">

            <table>

                <tr>

                    <td></td>

                    <td><span><img src="images/errorstate.gif"></span>

                        <span style="color:red; "><%= exception.get
                        Message() %></span></td>

                </tr>

                <tr>

                    <td>账号: </td>

                    <td><input type="text" name="username" style="width:
                    200px; "></td>

                </tr>

                <tr>

                    <td>密码: </td>

                    <td><input type="password" name="password" style=
                    "width:200px; "></td>

                </tr>

                <tr>

                    <td></td>

                    <td><input type="submit" value="   " class=
                    "button"></td>

                </tr>

            </table>

        </form>

    </fieldset>

</div>

</body>

</html>

程序运行效果如图5.2所示。

5.2  使用Cookie记录用户访问次数

客户端A与客户端B都可能访问该程序,A会提交ACookieB会提交BCookie。代码request.getCookies()并没有指明获取谁的Cookie。这句代码取的是谁的Cookie呢?答案是A执行时取的是ACookieB执行时取的是BCookie。这是Cookie机制规定的。程序只需要简单执行request.getCookies()就可以了,服务器只会返回当前客户的Cookie,而不会返回其他客户的Cookie。各客户端的Cookie彼此独立,互不可见。

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
  • 上一篇:Cookie机制简介
  • 下一篇:没有了
  • 共有评论 0相关评论
    发表我的评论
    • 大名:
    • 内容:
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号