会话技术
httpsession
保存在服务器端 并且为每一个用户创建一个session
浏览器关闭 会话结束
session的实现原理
1.session的实现依赖了cookie实现
2.用户第一次访问网页时 系统会为这个用户创建一个独立的session出来
并且为session分配一个id号
3.当请求完成响应回浏览器时 系统会创建一个cookie出来
cookie中保存session的id
4.浏览器接到响应 把响应中的cookie储存到浏览器中(等于储存session的id)
5.当用户再次访问网页时 请求中会带着cookie(id)
6.网页接到请求后 会去除cookie中的id去找对应的session
如果找到就直接使用 未找到就创建一个新的出来
把用户名储存在session域中:
String username = request.getParameter("username");
HttpSession session = request.getSession();
session.setAttribute("username", username);
获取session中保存的用户名:
HttpSession session = request.getSession();
String username= (String )session.getAttribute("username");
servlet就干三件事
1.接收请求中的参数
2.处理业务逻辑
3.请求分发(跳转新的页面)
httpsession 域对象
作用范围 一次会话中都有效
(会话结束 session失效)
默认有效时间 30分钟(tomcat 中conf文件夹下web-xml中配置的 session-confic)
session的钝化和活化
钝化:将session写入到文件中
活化:将写到文件中的session读回session对象中
服务器突然停止 这时session中的信息不会消失
会写入到文件中work/catalina/localhost/工程下/session.ser文件
当服务器再次启动 系统会从这个文件夹下把session读回来
通过钝化和活化 保证 session中数据安全
活化后 之前保存到额文件读取消失
注意:保存在session 对象要实现序列化接口
session设置有效时间
设置0或负数 这时session将永不过期
session.setMaxInactiveInterval(60*30);
让session失效的方法(注销用户信息)
session.invalidate();
人类与计算机的图灵测试(验证码)
方式1
int width=100;
int height=25;
//创建画布
BufferedImage image=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
//从画布中获取画笔
Graphics g=image.getGraphics();
//设置背景颜色
g.setColor(Color.white);
//填充背景颜色(留出边框)
g.fillRect(1, 1, width-2, height-2);
//设置边框颜色
g.setColor(Color.red);
g.drawRect(0, 0, width-1, height-1);
//设置字体颜色 类型大小
g.setColor(Color.blue);
g.setFont(new Font("宋体", Font.BOLD, 20));
//随机4个数字 画到画布上
Random random=new Random();
//随机0-9 [0,9)
//random.nextInt(10);
//声明x坐标
int positionX=20;
for (int i = 0; i < 4; i++) {
//画到画布上
//x y 是距离画布的坐标
g.drawString(random.nextInt(10)+"", positionX, 20);
positionX=positionX+20;
}
//画干扰线
for (int i = 0; i < 8; i++) {
g.drawLine(random.nextInt(width), random.nextInt(height),
random.nextInt(width), random.nextInt(height));
}
//响应回页面
ImageIO.write(image, "jpg", response.getOutputStream());
方式2
参数1:宽 参数2:高 参数3:验证码个数 参数4:干扰线个数
//创建validatecode
ValidateCode validateCode=new ValidateCode(100, 25, 4, 9);
//获取随机出来的验证码
String code = validateCode.getCode();
//将验证码写会网页
validateCode.write(response.getOutputStream());