zoukankan      html  css  js  c++  java
  • 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);
        }
    
    }
  • 相关阅读:
    NPOI 的使用心得
    uploadfiy 动态传递Form 参数
    积分系统总结
    easyui dataBox 增加一天,减少一天
    easyui datagrid footer 页脚问题
    sql server 视图 的一个例子
    sql server int 列 NULLIF,isnull 判断是0还是1 ,如果是0就变成1
    easyui 小知识
    获取 日期 最后一天
    my97 日期控件
  • 原文地址:https://www.cnblogs.com/learnjfm/p/6912539.html
Copyright © 2011-2022 走看看