Session
2020-02-02 15:13
239 查看
什么是Session
Session是由服务器产生,保存在服务器中
一个用户 对应一个session( 一个浏览器 对应一个session)
session的原理
JessionId session是依赖于cookie的
注意:如果服务器关闭 ,那么会产生一个新的session 和 新的session id
session的常用方法
request.getSession().setAttribute()
request.getSession().getAttribute()
request.getSession().removeAttribute()
session 的默认有效时间:30分钟
session 失效的方法:
1、配置web.xml
<session-config> <session-timeout>1</session-timeout> </session-config>
2、手动的干掉session
session.invalidate();
3、代码设置session的保存时间
session.setMaxInactiveInterval(); 单位秒
案例:验证码的获取
验证码的servlet类
import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; /** * 验证码 */ @WebServlet("/checkCodeServlet") public class CheckCodeServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //服务器通知浏览器不要缓存 response.setHeader("pragma","no-cache"); response.setHeader("cache-control","no-cache"); response.setHeader("expires","0"); //在内存中创建一个长80,宽30的图片,默认黑色背景 //参数一:长 //参数二:宽 //参数三:颜色 int width = 80; int height = 30; BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //获取画笔 Graphics g = image.getGraphics(); //设置画笔颜色为灰色 g.setColor(Color.GRAY); //填充图片 g.fillRect(0,0, width,height); //产生4个随机验证码,12Ey String checkCode = getCheckCode(); //将验证码放入HttpSession中 request.getSession().setAttribute("checkCode_session",checkCode); //设置画笔颜色为黄色 g.setColor(Color.YELLOW); //设置字体的小大 g.setFont(new Font("黑体",Font.BOLD,24)); //向图片上写入验证码 g.drawString(checkCode,15,25); //将内存中的图片输出到浏览器 //参数一:图片对象 //参数二:图片的格式,如PNG,JPG,GIF //参数三:图片输出到哪里去 ImageIO.write(image,"PNG",response.getOutputStream()); } /** * 产生4位随机字符串 */ private String getCheckCode() { String base = "0123456789ABCDEFGabcdefg"; int size = base.length(); Random r = new Random(); StringBuffer sb = new StringBuffer(); for(int i=1;i<=4;i++){ //产生0到size-1的随机值 int index = r.nextInt(size); //在base字符串中获取下标为index的字符 char c = base.charAt(index); //将c放入到StringBuffer中去 sb.append(c); } return sb.toString(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request,response); } }
登录的servlet类
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/loginServlet") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、获取参数 String username = request.getParameter("username"); String password = request.getParameter("password"); String code = request.getParameter("code"); //2、获取session中的验证码 String checkCode_session = (String) request.getSession().getAttribute("checkCode_session"); //3验证验证码 if(code.equalsIgnoreCase(checkCode_session)){ //判断用户名和密码 if(username.equals("coco") && password.equals("123")){ request.getSession().setAttribute("msg", "登录成功!"); request.getSession().setAttribute("user", "coco"); response.sendRedirect("/success.jsp"); }else{ request.getSession().setAttribute("msg", "用户名或者密码有误!!!"); response.sendRedirect("/login.jsp"); } }else{ request.getSession().setAttribute("msg", "验证码错误!"); response.sendRedirect("/login.jsp"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response ); } }
前端代码:login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>管理员登录</title> <!-- 1. 导入CSS的全局样式 --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- 2. jQuery导入,建议使用1.9以上的版本 --> <script src="js/jquery-2.1.0.min.js"></script> <!-- 3. 导入bootstrap的js文件 --> <script src="js/bootstrap.min.js"></script> <script type="text/javascript"> </script> </head> <body> <div class="container" style="width: 400px;"> <h3 style="text-align: center;">管理员登录</h3> <form action="/loginServlet" method="post"> <div class="form-group"> <label for="user">用户名:</label> <input type="text" name="username" class="form-control" id="user" placeholder="请输入用户名"/> </div> <div class="form-group"> <label for="password">密码:</label> <input type="password" name="password" class="form-control" id="password" placeholder="请输入密码"/> </div> <div class="form-inline"> <label for="vcode">验证码:</label> <input type="text" name="code" class="form-control" id="verifycode" placeholder="请输入验证码" style="width: 120px;"/> <a href="javascript:refreshCode()"> <img src="${pageContext.request.contextPath}/checkCodeServlet" title="看不清点击刷新" id="vcode"/> </a> </div> <hr/> <div class="form-group" style="text-align: center;"> <input class="btn btn btn-primary" type="submit" value="登录"> </div> </form> <!-- 出错显示的信息框 --> <div class="alert alert-warning alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" > <span>×</span></button> <strong>${msg}</strong> </div> </div> </body> <script> function refreshCode() { // 1、获取当前图片对象 var elementById = document.getElementById("vcode"); // 2、修改 src 的值 elementById.src = "${pageContext.request.contextPath}/checkCodeServlet?time=" + new Date().getTime(); } </script> </html>
转载于:https://www.cnblogs.com/wzhsc/p/10403245.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PHP修改session_id示例代码
- 用ThreadLocal模式管理Hibernate的session
- Session、Dialog和Transaction的区别
- Struts2保存session 实现自动登陆
- nginx 丢失session 解决
- WRH$_ACTIVE_SESSION_HISTORY Does Not Get Purged Based Upon the Retention Policy (文档 ID 387914.1)
- 使用tomcat作为web应用容器时,启用新线程找不到Session的问题
- php中session_id的使用注意
- asp.net HttpHandler操作Session的函数代码
- 仿spring中hibernateCallback写了个对session的封装
- Java根据sessionId获取Session对象
- Session简单实现购物功能
- php中Session的生成机制、回收机制和存储机制探究
- php 如何设置一个严格控制过期时间的session
- 在Ajax请求中处理登录session超时的方法
- Session对象的应用
- MySQL设置global变量和session变量的两种方法详解
- ASP.NET(c#)操作cookie、session、cache工具类
- Weblogic跨域session冲突解决办法
- 今天把session设置成功了