1、使用Cookie实现的登录的不足:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Connection con=null;
        login log= null;
        String account=request.getParameter("username");//获得表单数据只在此Servlet起作用
        String password=request.getParameter("password");
        Cookie cookie=new Cookie(account,password);
        cookie.setPath("/Servlet_login_war_exploded/cookie");
        cookie.setMaxAge(**);
        response.addCookie(cookie);
        try {
            con=C3p0Utils.getConnection();
            QueryRunner qr = new QueryRunner();
            String sql = "Select * from login where account=? and password=?";
            Object[] select = {account,password};
            log = qr.query(con, sql, new BeanHandler<login>((login.class)), select);
            if(log!=null){

                response.getWriter().write("nihao"+account);
            }
            else{

                response.getWriter().write("wrong");
            }

        }
        catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式
        response.getWriter().write("<html>");
        response.getWriter().write("<head>");
        response.getWriter().write("<title>");
        response.getWriter().write("Login");
        response.getWriter().write("</title>");
        response.getWriter().write("</head>");
        response.getWriter().write("<body bgcolor=\"aqua\">");
        response.getWriter().write("<center>");
        response.getWriter().write("<h3>");
        response.getWriter().write("欢迎你"+request.getParameter("account"));
        response.getWriter().write("</h3>");
        response.getWriter().write("</center>");
        response.getWriter().write("</body>");
    }

使用Cookie虽然实现了三天免登陆的基础功能,但是,如果在用Cookie登录成功后需要重定向到另外一个Cookie时,request获取的值在重定向的Servlet中已经不再起作用了。访问的结果只能是空值。

2、使用Session的请求共享功能,实现在不同的Servlet跳转过程中依旧能够通过request获得用户信息。

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式
        Cookie[] cookies=request.getCookies();
        Connection con=null;
        login log= null;
        ;
        try {
            con= C3p0Utils.getConnection();
            QueryRunner qr = new QueryRunner();
            String sql = "Select * from login";
            List<login> list = qr.query(con, sql, new BeanListHandler<login>((login.class)));
            if(cookies!=null) {//验证数据库中是否有与Cookie对应的用户
                ; i < list.size(); i++) {
                    log= list.get(i);
                for (Cookie cookie : cookies) {
                        if((log.getAccount().equals(cookie.getName()))&&(log.getPassword().equals(cookie.getValue()))){
                            HttpSession httpSession=request.getSession();
                            httpSession.setAttribute("login",log);
                           successNum++;
                        }
                }
                }
                ){

                    response.sendRedirect("/Servlet_login_war_exploded/main");//重定向
                }
                else{
                    request.getRequestDispatcher("page").forward(request,response);
                }

            }
            else{
                request.getRequestDispatcher("page").forward(request,response);//请求转发
            }
        }
        catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

在通过Cookie登录成功后,创建了Session,对Session进行了赋值,而在重定向到MainServlet后,可以冲Session中获取值。虽然在不同的Servlet中,是不同的请求,但是依旧能够通过Session获取值。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        login log= (login) request.getSession().getAttribute("login");
        response.setContentType("text/html; charset=utf-8");//设置浏览器编码格式
        response.getWriter().write("<html>");
        response.getWriter().write("<head>");
        response.getWriter().write("<title>");
        response.getWriter().write("Login");
        response.getWriter().write("</title>");
        response.getWriter().write("</head>");
        response.getWriter().write("<body bgcolor=\"aqua\">");
        response.getWriter().write("<center>");
        response.getWriter().write("<h3>");
        response.getWriter().write("欢迎你"+log.getAccount());
        response.getWriter().write("</h3>");
        response.getWriter().write("</center>");
        response.getWriter().write("</body>");
    }

Session的应用——三天免登录的更多相关文章

  1. ServletContext对象应用——三天免登录

    1.用到的知识点: (1)Cookie (2)Session (3)ServletContext 其中Cookie和Session是会话技术的组成部分,一次会话从打开浏览器的某个站点开始,到浏览器关闭 ...

  2. Cookie的应用——Servlet实现三天免登录

    1.工程结构: 2.Servlet的运用: (1)登录界面: protected void doGet(HttpServletRequest request, HttpServletResponse ...

  3. cookie之三天免登录代码

    LoginCookie.java 1 package com.bjsxt.cookie; import java.io.IOException; import java.net.URLDecoder; ...

  4. [py][mx]django的cookie和session操作-7天免登录

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  5. Retrofit2.0 ,OkHttp3完美同步持久Cookie实现免登录(二)

    原文出自csdn: http://blog.csdn.net/sk719887916/article/details/51700659: 通过对Retrofit2.0的<Retrofit 2.0 ...

  6. 火车采集器 帝国CMS7.2免登录发布模块

    帝国cms7.2增加了金刚模式,登录发布有难度.免登录发布模块配合火车采集器,完美解决你遇到的问题. 免登录直接获取栏目列表 通过文件内设置密码免登录发布数据 帝国cms7.2免登陆文章发布接口使用说 ...

  7. 微博爬虫“免登录”技巧详解及 Java 实现(业余草的博客)

    一.微博一定要登录才能抓取? 目前,对于微博的爬虫,大部分是基于模拟微博账号登录的方式实现的,这种方式如果真的运营起来,实际上是一件非常头疼痛苦的事,你可能每天都过得提心吊胆,生怕新浪爸爸把你的那些账 ...

  8. spring mvc 用cookie和拦截器实现自动登录(/免登录)

    Cookie/Session机制详解:http://blog.csdn.net/fangaoxin/article/details/6952954 SpringMVC记住密码功能:http://blo ...

  9. Linux SSH免登录配置总结(转)

    转载请出自出处:http://eksliang.iteye.com/blog/2187265 一.原理 我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器Serv ...

随机推荐

  1. idea常用插件安装

    1.IDEA Restart IDEA没有重启的选项,这个工具就是来弥补这个功能,可以在File-->Restart 重启,也可以使用快捷键  CTRL + ALT + R 2.Maven He ...

  2. c# 操作xml文件(读写)

    根据项目需求,我们需要记录用户的操作痕迹,当用户下次登录操作同一个文件时,页面显示为用户上一次执行的用户轨迹,我们考虑把用户的历史记录写进xml文件中. 存储的xml数据结构: XML操作类: usi ...

  3. Sql 脚本文件太大 还原数据库

    sql脚本太大直接在数据库中执行会提示内存不足,我们看生成的脚本文件会发现每隔100条会有一个GO来分隔,这就好说了 在我将数据库的结构连同数据生成一个脚本文件db.sql 后,想在另外的电脑上恢复数 ...

  4. python 直角图标生成圆角图标

    参考链接:https://stackoverflow.com/questions/11287402/how-to-round-corner-a-logo-without-white-backgroun ...

  5. 配置APP的图标

    https://www.cnblogs.com/hupo376787/p/10290840.html 上一篇文章说到  Flutter - 自动生成Android & iOS图标 通过flut ...

  6. 【转载】C#中使用Average方法对List集合中相应元素求平均值

    在C#的List集合操作中,有时候需要对List集合元素进行汇总求平均值,如数值类型的List集合元素,有时候对象类型的List集合也需要对集合中的元素的某个对象进行汇总求平均值,此时都可以使用到Av ...

  7. 【转载】ASP.NET网站选购阿里云服务器的时候,阿里云账号个人认证以及企业认证有何不同

    在采购阿里云产品,如阿里云云服务器.阿里云短信包.阿里云数据库MySql以及Sqlserver.阿里云对象存储OSS等云产品的时候,如果账号未进行实名认证,很多时候会要求实名认证操作,在实名认证时可选 ...

  8. elementui switch 开关,点击确认按钮后在进行开关

    <el-table-column label="上头条" align="center"> <template slot-scope=" ...

  9. django路由的反向解析

    什么是路由的反向解析 我们的路由都是一个匹配关系,对应一个处理的视图函数, 如果我们的匹配关系发生了变化,那么与之对应的访问地址(可能前端直接url链接, 也可能是后端的redrict跳转)都需要跟着 ...

  10. react将多个公共组件归成一类,方便调用

    目录结构 . ├── component # 公共组件存放 ├ ├── example ├ ├ ├── example1.ts # 例子1 ├ ├ ├── example2.ts # 例子2 ├ ├ ...