cookie的基础以及小案例

1.会话技术

  

用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话
cookie:将数据保存到客户端浏览器
session:将数据保存到服务器端

向浏览器保存数据:
response.addCookie(Cookie cookie)
获取浏览器带过来的数据:
request.getCookies();
创建cookie对象:
cookie(String name,String value);

2.JSP的简单概述

jsp:java代码+html的元素+jsp内置的东西
jsp的执行过程:
jsp会被翻译成servlet,编译成class进行执行
jsp的脚本元素:
<%! %>:翻译成类中的成员部分,定义变量,定义方法,定义类,Servlet是线程不安全的,尽量少在类中定义成员变量
<% %>:翻译成类的service方法内部的内容,定义变量,定义类,直接写代码块
<%= %>:翻译成service方法内部的out.print();

3.记录用户的上次登录访问时间

public class ServletDemo1 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取当前时间
        String time = new Date().toLocaleString();
        //获得所有cookie
        Cookie[] cookies = request.getCookies();
        //遍历cookies判断有没有记录登录时间的cookie
        if(cookies != null) {
            for (Cookie cookie : cookies) {
                //如果匹配到保存时间的cookie,用户不是第一次访问
                if(cookie.getName().equals("visitTime")) {
                    String visitTime = cookie.getValue();
                    response.getWriter().write("欢迎回来,上次访问的时间是:"+cookie.getValue());
                }
            }
        }else {
            response.getWriter().write("欢迎访问本网站!");
        }
        //创建cookie对象保存
        Cookie c = new Cookie("visitTime", time);
        //发送cookie
        response.addCookie(c);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

4.cookie常用的api

getName();获得名字
getValue();获得对应的值
setDomain(String domain);设置cookie的有效域名
setPath(String path);设置cookie的有效路径
setMaxAge(int maxAge);设置cookie的有效时间

5.cookie的分类

会话级别的cookie:默认的cookie,关闭浏览器cookie就会销毁
持久级别的cookie:可以设置cookie的有效时间,那么关闭浏览器cookie还会存在,手动销毁持久性Cookie.setMaxAge(0);

6.商品的浏览历史记录

步骤:
点击某个商品,将商品ID传递给一个Servlet
在Servlet中判断是否是第一次浏览商品
如果是第一次:将商品ID存入到cookie中
如果不是,判断商品是否被浏览过,如果浏览过,就 删除对应的cookie,添加到首尾,没有就判断是否达到浏览商品显示的最大值,
如果没有就直接添加到第一个,如果达到了就删除最后一个,再添加都首位

public class ServletDemo2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收用户点击商品传递过来的id
        String id = request.getParameter("id");
        //获得所有的cookie信息
        Cookie[] cookies = request.getCookies();
        //判断有没有浏览过这个商品
        Cookie cookie = CookieUtils.findCookie(cookies,id);
        //用户是第一次浏览
        if(cookie == null) {
            //创建cookie对象
            Cookie c = new Cookie("history", id);
            //设置一个小时的销毁
            cookie.setMaxAge(60*60);
            //发送cookie
            response.addCookie(c);
            //用户不是第一次浏览
        }else {
            //得打cookie的值
            String value = cookie.getValue();
            //切掉在拼接cookie时的,号
            String[] ids = value.split(",");
            //将数组转换成集合
            List<String> aslist = Arrays.asList(ids);
            //将list转换成linkedlist
            LinkedList<String> list = new LinkedList<>(aslist);
            //如果用户之前浏览过这个商品
            if(list.contains(id)) {
                //删除对应的
                list.remove(id);
                list.addFirst(id);
                //没有浏览过
            }else {
                //判断是否达到最大值
                if(list.size() < 3) {
                    //直接添加到第一个
                    list.addFirst(id);
                    //达到最大值
                }else {
                    //删除最后一个
                    list.removeLast();
                    list.addFirst(id);
                }
            }
            //创建拼接的StringBuffer
            StringBuffer sb = new StringBuffer();
            for(String s:list) {
                sb.append(s).append(",");
            }
            //去掉最后一个,号
            String idValue = sb.toString().substring(0,sb.length()-1);
            //保存到cookie中
            Cookie c = new Cookie("history", idValue);
            //发送
            response.addCookie(c);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
class CookieUtils {

    public static Cookie findCookie(Cookie[] cookies,String name){
        if(cookies == null){
            return null;
        }else{
            for(Cookie cookie:cookies){
                if(name.equals(cookie.getName())){
                    return cookie;
                }
            }

            return null;
        }
    }
}

7.清空浏览历史记录

点击清空浏览历史记录的超链接,
跳转到servlet
得到指定保存浏览历史记录的cookie,
设置保存时间为0
重定向到商品显示页面

public class Demo3Servlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获得所有的cookie
        Cookie[] cookies = request.getCookies();
        //遍历cookies,拿到保存浏览历史记录的cookie
        for (Cookie cookie : cookies) {
            if(cookie.getName().equals("history")) {
                //设置保存时间为0
                cookie.setMaxAge(0);
            }
        }
        //重定向
        response.sendRedirect(request.getContextPath()+"/list.jsp");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
时间: 2024-10-11 18:41:31

cookie的基础以及小案例的相关文章

使用cookie进行登录的小案例

#!/usr/bin/env python # -*- coding:utf-8-*- import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.render('index.html') class LoginHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs

Cookie小案例-----记住浏览过的商品记录

Cookie小案例------记住浏览过的商品记录 我们知道,这个功能在电商项目中很常见.这里处理请求和页面显示都是由servlet实现,主要是为了体现cookie的作用, 实现功能如下: 1,点击购买的商品后,显示到另一页面 2,记住用户浏览过的商品,并在页面时中显示 3,当浏览过的数量超过最大值限度时,最下面一个商品被挤下去 4,当浏览过的商品本身就在浏览记录中,显示列表将其从中间移到最上面 显示一打开网站的样子和显示用户的浏览记录: package cn.itcast.cookie; im

JavaScript基础--小案例:在网页指定位置弹出错误信息(十二)

案例分析:点击按钮后,在网页上指定区域,提示错误信息!5秒后,错误信息提示自动消失! 1 <script languag="javascript" type="text/javascript"> 2 var clearId; 3 function test(){ 4 document.getElementById("showMsg").style.cssText="width:200px;height:50px;left:6

Cookie小案例

Cookie小案例: 1记住用户最后一次的访问时间 2记住用户登录时的用户名 // 1利用Cookie技术,记住用户上次访问的时间 public class ShowLastAccessTimeServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcepti

Cookie插件小案例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <sc

javascript入门视频第一天 小案例制作 零基础开始学习javascript

JavaScript 是我们网页设计师必备的技能之一.我们主要用javascript来写的是网页特效.我们从零基础开始学习javascript入门. 但是,好的同学刚开始不知道怎么学习,接触js,因此,小强老师给大家写了这篇入门的javascript文章.从零基础开始学习js,使大家入门更简单,希望大家喜欢.JavaScript是一种脚本语言. 也是我们web网络中最为流行一种脚本语言.脚本语言:     1.不是独立存在的.需要依附.js就是依附在浏览器中.     2.脚本语言也是语言,也有

十五道Python小案例,学会这些,Python基础已过关!

十五道Python的小案例,不知道各位都会了多少! 一.猜数字 1到4能组成多少个互不相同且不重复数字的三位数?分别是? 分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源代码: 二.公司发放的奖金的计算 分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型. 程序源代码: 三.一个整数加上100后是一个完全平方数,再加168又是一个完全平方数,请问该数是多少? 分析: 程序源代码: 四.输入*年*月*日,判断这一天是这一年的第几天?

Thinkphp 生成订单号小案例

Thinkphp 生成订单号小案例小伙伴们在日常的商城项目开发中,都会遇到订单号生成的问题,今天呢思梦PHP就带领大家去解读一下生成订单号的问题!首先,订单号我们要明确它有有3个性质:1.唯一性 2.不可推测性 3.效率性,唯一性和不可推测性不用说了,效率性是指不能频繁的去数据库查询以避免重复.况且满足这些条件的同时订单号还要足够的短.不知道小伙伴们在日常的项目中是否也和我一样去思考过生成订单的一些小问题,可能你也会说,这些东西不用想的那么复杂,其实呢,小编也是同意大家的看法,但是殊不知我们做程

Session小案例-----简单购物车的使用

Session小案例-----简单购物车的使用 同上篇一样,这里的处理请求和页面显示同样用的都是servlet. 功能实现如下: 1,显示网站的所有商品 2,用户点击购买后,能够记住用户选择的商品 3,实现了多个会话共享一个session 4, 实现了浏览器禁用cookie后数据共享问题的处理 首页: package cn.itcast.shopping; import java.io.IOException; import java.io.PrintWriter; import java.io