在我们浏览网页的时候,经常会看到自己曾经浏览过的网页的具体的一些信息,那这些究竟是通过什么来实现的呢?难道是有人在监视我们的电脑吗?其实不是的,实现这一功能就是利用了我们接下来看到的cookie技术。cookie本身其实就是保存在我们浏览器客户端的一个txt 文件,每次我们打开相应的额浏览网页就会自动的调用这个问价,然后查看练得具体的内容,然后你就可以看到自己的浏览记录了。

相对比而言,有客户端的信息保存,当然也会有服务器端的信息保存了,但是二者实现的原理不同,而且其功能也不相同。下面让我们先对比一些二者的不同之处:

Session是保存在服务器端的的用户信息内容,保存的信息的类型是Object类型,也就是java中最为常见的类。热切这些信息会随着会话(也就是客户端与服务器之间的交互)的结束就会销毁,虽然它保存的是比较重要的信息。

而Cookie则是在客户端保存信息,保存的信息的数据类型是String类型,最重要的是Cookie可以长期的保存在客户端中,其实你也可以自己手动设置Cookie的生存周期,以及是否要在客户端写进Cookie,当然咯,使用Cookie保存信息终究是不安全的,所以一般只用它来保存一些不重要的信息。

那么闲话不多说,让我们开始用代码说话吧。

首先我们需要一个浏览器页面,我们用jsp来实现。原理就是制作一个表单,显示我们要填写的信息,然后又增加了一个判断是否勾选了checkbox,以减去手动输入用户名及密码的步骤,过程中有可能出现中文乱码的情况,所以我们加上了java.net.*包下的解码函数URLDecoder.encode(String,"字符编码集")代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<%@ page import="java.net.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Login Jsp PaFfge</title>

</head>

<body>

    <br>

    <%

        request.setCharacterEncoding("utf-8");

        String username = "";

        String password = "";

        Cookie[] cookies = request.getCookies();

        if (cookies != null && cookies.length > 0) {

            for (Cookie c : cookies) {

                if (c.getName().equals("username")) {

                    username = URLDecoder.decode(c.getValue(), "utf-8");

                }

                if (c.getName().equals("password")) {

                    password = URLDecoder.decode(c.getValue(), "utf-8");

                }

            }

        }

    %>

    <br>

    <form name="loginForm" action="dologin.jsp" method="post">

        <table>

            <tr>

                <td>用户名:</td>

                <td><input type="text" name="username" value="<%=username%>" /></td>

            </tr>

            <tr>

                <td>密码:</td>

                <td><input type="password" name="password"

                    value="<%=password%>" /></td>

            </tr>

            <tr>

                <td colspan="2"><input type="checkbox" name="isUseCookie"

                    checked="checked" />十天内记住我的登录状态</td>

            </tr>

            <tr>

                <td colspan="2" align="center"><input type="submit" value="登录" /><input

                    type="reset" value="取消" /></td>

            </tr>

        </table>

    </form>

</body>

</html>

做好了登陆界面,那么我们当然需要一个处理登陆界面的逻辑了,于是dologin.jsp就派上了用场,其主要的功能就是生成Cookie和删去Cookie,分别对应变淡中是否勾选了checkbox的两种情况代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

    <%@ page import="java.net.*" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>DoLogin jsp Page</title>

</head>

<body>

    <h1>登录成功</h1>

    <hr>

    <br>

    <br>

    <br>

    <%

       request.setCharacterEncoding("utf-8");

       //首先判断用户是否选择了记住登录状态

       String[] isUseCookies = request.getParameterValues("isUseCookie");

       if(isUseCookies!=null&&isUseCookies.length>0)

       {

          //把用户名和密码保存在Cookie对象里面

          String username = URLEncoder.encode(request.getParameter("username"),"utf-8");

          //使用URLEncoder解决无法在Cookie当中保存中文字符串问题

          String password = URLEncoder.encode(request.getParameter("password"),"utf-8");

          

          Cookie usernameCookie = new Cookie("username",username);

          Cookie passwordCookie = new Cookie("password",password);

          usernameCookie.setMaxAge(864000);

          passwordCookie.setMaxAge(864000);//设置最大生存期限为10天

          response.addCookie(usernameCookie);

          response.addCookie(passwordCookie);

       }

       else

       {

          Cookie[] cookies = request.getCookies();

          if(cookies!=null&&cookies.length>0)

          {

             for(Cookie c:cookies)

             {

                if(c.getName().equals("username")||c.getName().equals("password"))

                {

                    c.setMaxAge(0); //设置Cookie失效

                    response.addCookie(c); //重新保存。

                }

             }

          }

       }

    %>

    <a href="users.jsp" target="_blank">查看用户信息</a>

</body>

</html>

从上面我们看到了一个超链接,指向的就是我么用Cookie记录的用户的信息,需要注意的是,我们创建Cookie的时候用的编码集一定要和解码时的一致,否则只能得到乱码,那么代码如下:

<%@page import="java.net.URLDecoder"%>

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Users JSP Page</title>

</head>

<body>

    <h1>User Info</h1>

    <%

        request.setCharacterEncoding("utf-8");

        String username = "";

        String password = "";

        Cookie[] cookies = request.getCookies();

        if (cookies != null && cookies.length > 0) {

            for (Cookie c : cookies) {

                if (c.getName().equals("username")) {

                    username = URLDecoder.decode(c.getValue(), "utf-8");

                }

                if (c.getName().equals("password")) {

                    password = URLDecoder.decode(c.getValue(), "utf-8");

                }

            }

        }

    %>

    <br>

    <br> UserName:<%=username%>

    Password:<%=password%>

</body>

</html>

好了,以上就是我们的代码的全部内容了,接下来让我们看一下具体的展示界面吧:

JSP之Cookie的实现的更多相关文章

  1. jsp中cookie的一个报错

    写项目时在一个jsp页面中使用了cookie,用逗号分隔的数据,服务器老报错,搞了一个小时,终于清楚了,jsp的cookie中不能使用逗号. cookie规则:这个规则用于jsp.asp中(下面这两句 ...

  2. jsp 入门 cookie session

    Java Server Page ==> 服务器端的动态页面资源.用来做显示的功能. JSP构成 ==> HTML 脚本代码 标签构成. JSP 原理 ==> 实际上就是 servl ...

  3. jsp利用cookie记住用户名,下次登录时显示在文本框中(仅仅一个Cookie就整了将近三个小时,⊙﹏⊙b汗)

    <%@page import="java.net.URLDecoder"%> <%@page import="sun.security.util.Len ...

  4. JSP之Cookie

    Cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器,通过使用cookie可以标识用户身份,记录用户名和密码,跟踪重复等. 首先创建index.jsp: <%@page import ...

  5. 【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能

    Cookie是服务器存放在客户端的一些数据,比如密码,以及你曾经访问过的一些数据. 设置Cookie //设置cookie Cookie cookie = new Cookie("TOM&q ...

  6. JSP获取Cookie对象

    cookie是小段的文本信息,在网络服务器上生成,并发送给浏览器的.通过使用cookie可以标识用户身份,记录用户和密码,跟踪重复用户等.浏览器将cookie以key/value的形式保存到客户机的某 ...

  7. jsp使用cookie自动登录

    Login.jsp <%@ page language="java" import="java.util.*" pageEncoding="ut ...

  8. JSP(4)—Cookie创建及简单案例(自动登录)

    Cookie的创建: 创建一个JSP页面,第一次访问时显示没有Cookie,正在创建,再次访问就会自动显示cookie的名称,并设置cookie过期时间 <% //在javaweb规范中使用Co ...

  9. JSP(3)—Cookie和Session

    HTTP是一个无状态的协议,web服务器无法分辨出那些请求是同一个浏览器发出的,浏览器每一次请求都是孤立的 即使HTTP1.1支持持续链接,但当用户有一段时间没有请求时,连接也会关闭. 如何实现网上的 ...

随机推荐

  1. Zookeeper Api

    如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...

  2. MyBatis 查询映射自定义枚举

    背景                  MyBatis查询若想映射枚举类型,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用         ...

  3. 疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN

    定义Model: from django.db import models class Moreinfo(models.Model): weight = models.FloatField() hei ...

  4. 快速排序quick_sort(python的两种实现方式)

    排序算法有很多,目前最好的是quick_sort:unstable,spatial complexity is nlogN. 快速排序原理 python实现 严蔚敏的 datastruct书中有伪代码 ...

  5. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  6. Unity UGUI图文混排(六) -- 超链接

    图文混排更新到超链接这儿,好像也差不多了,不过就在最后一点,博主也表现得相当不专业,直接整合了山中双木林同学提供的超链接的解决方案,博主甚至没来得及细看就直接复制了,但感觉还是挺好用的. 博主已经将超 ...

  7. (Java)微信之个人公众账号开发(一)——进入开发者模式

    本篇文章将教大家如何建立微信个人公众账号,(注意:后台全部是用javaweb相关技术开发),大家知道,现在微信公众账号分服务号和订阅号,现在我要讲的主要是个人微信公众账号的建立以及后台的开发,个人公众 ...

  8. 使用Android Studio向GitHub提交代码

    使用Android Studio向GitHub提交代码 在GitHub上创建一个仓库 填写仓库名称.描述.类型(公有.私有)等信息,点击创建 到此,成功创建了我们的仓库,并且初始化创建了README. ...

  9. 微信小程序基础之创建使用教程

    本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果.这个小程序的首页将会显示欢迎语以及当前用户的微信头像,点击头像,可以在新开的页面中查看当前小程序的启动日志. 1. 获取 ...

  10. zk日常运维管理

    清理数据目录 dataDir目录指定了ZK的数据目录,用于存储ZK的快照文件(snapshot).另外,默认情况下,ZK的事务日志也会存储在这个目录中.在完成若干次事务日志之后(在ZK中,凡是对数据有 ...