Session的应用——三天免登录
2024-08-22 08:00:32
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>"); }
最新文章
- Linux 查看进程和删除进程
- 基于Vue封装分页组件
- 树莓派实现远程开机局域网电脑(WOL协议+etherwake+华硕主板Z97)秒变花生壳开机棒
- MyBatis 特殊字符处理
- Think in java 4th读书笔记__last update20151130
- mysql的常用函数
- 【液晶模块系列基础视频】5.4.X-GUI字体驱动4
- ThinkSNS插件的使用方法
- artdialog 提示 确定或取消
- 提升你的Java应用性能:改善数据处理
- hdu4858 项目管理 bestcoder round1 B
- 搭建AVL树
- Python的路径引用
- Java基础—标识符及命名规范
- [转载]mysql绑定参数bind_param原理以及防SQL注入
- JavaScript基础知识(JSON、Function对象、原型、引用类型)
- Phoenix(SQL On HBase)
- 探究高级的Kotlin Coroutines知识
- python注册到eureka
- 总结一下《vue的使用》
热门文章
- [BZOJ2739]最远点(DP+分治+决策单调性)
- 广度优先搜索(BFS)思路及算法分析
- PL/SQL不安装ORACLE客户端
- 【Java拾遗】Java transient关键字
- Spring中ApplicationContextAware的作用
- ChipGenius 识别U盘主控信息
- Mycat分布式数据库架构解决方案--Server.xml详解
- BUAA OO 2019 第四单元作业总结
- Spring Boot 笔记 (1) - Maven、基本配置、Profile的使用
- python中csv模块和join函数的使用