本文主要是介绍【JavaWeb】5、Cookie、Session、kaptcha验证码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
十、Cookie
Cookie是服务器通知客户端保存键值对的一种技术
当客户端有了Cookie后,每次请求都发送给服务器
每个Cookie的大小不能超过4KB
创建Cookie
在服务器程序中创建、并通过response设置cookie
// 1. 创建Cookie对象Cookie cookie = new Cookie("key2", "value2");
// 2. 通知客户端保存Cookieresp.addCookie(cookie);
获取Cookie
服务端获取客户端的Cookie:req.getCookies(),会返回Cookie数组
// 1. 获取CookieCookie[] cookies = req.getCookies();for(Cookie cookie : cookies){resp.getWriter().write("Cookie["+cookie.getName()+"="+cookie.getValue()+"]<br/>");}Cookie cookie = CookieUtils.getCookie(cookies, "key2"); //遍历查找if(cookie!=null) resp.getWriter().write("找到了Cookie:"+cookie.getName());
修改Cookie
方法一:
- 创建一个要修改的同名Cookie对象
- 在构造器中赋予新的Cookie值
- 调用response.addCookie()通知客户端保存修改
方法二:
- 遍历Cookies找到要修改的Cookie对象
- 调用Cookie对象的setValue()方法,赋予新的值
- 调用response.addCookie()通知客户端保存修改
Cookie的生命控制
管理Cookie什么时候被销毁(删除)
Cookie.setMaxAge(int expiry),设置cookie的最大生存时间,以秒为单位,默认值为-1
-
若设为负数,则当浏览器关闭,Cookie就会被删除
-
若设为0,则删除该Cookie
Cookie有效路径Path
Cookie的path属性可以过滤浏览器发送给服务器的Cookie,默认是工程路径
只有在访问的资源路径匹配Cookie设置的path时,才会发送该Cookie
Cookie cookie = new Cookie("path1","path1");
// getContextPath() —— 得到工程路径cookie.setPath(req.getContextPath() + "/abc"); // —— 工程路径/abcresp.addCookie(cookie);resp.getWriter().write("创建了一个带有Path路径的Cookie");
十一、Session
- Session是一个接口HTTPSession
- Session是用来维护一个客户端和服务器之间关联的会话,保存在服务器端
- 每个客户端都有自己的一个Session会话
- Session会话经常用来保存用户登录之后的信息
创建、获取Session
-
request.getSession()
- 第一次调用时:创建Session会话
- 之后调用时:获取前面创建好的Session会话对象
-
isNew():判断Session会话是否是刚创建出来的
- true:表示刚创建
- false:表示获取之前创建
每个会话都有一个唯一的ID值
- getId():获取Session的会话ID值
Session域数据
设置Session域数据
session.setAttribute("key1","value1");
获取Session域数据
session.getAttribute("key1");
Session生命周期控制
Session的超时时长指的是:客户端两次请求的最大间隔时长
- setMaxInactiveInterval(int interval):设置Session的超时时间,超过指定时长就会被销毁(单位:秒)
- 设置为正数时:设定超时时长
- 设置为负数时:表示永不超时(极少使用)
- getMaxInactiveInterval():获取Session的超时时间(单位:秒)
- invalidate():让当前Session会话马上超时无效,销毁
Session默认超时时长为1800秒 = 30分钟
因为Tomcat服务器的配置文件web.xml中默认有以下配置
<session-config><session-timeout>30</session-timeout></session-config>
- 如果想修改工程下所有Session的超时时长,可以在自己工程的web.xml文件中添加该标签并设置超时时间
- 如果想修改个别Session的超时时长,可以在Servlet程序中获取session对象后调用setMaxInactiveInterval方法进行设置
HttpSession session = request.getSession();
session.setMaxInactiveInterval(3);
浏览器和Session关联的底层原理
Session技术,底层其实是基于Cookie技术来实现的
十二、谷歌kaptcha图片验证码
使用步骤
- 导入kaptchar-2.3.2.jar包
- 在web工程的web.xml文件中配置用于生成验证码的Servlet程序
<servlet><servlet-name>KaptchaServlet</servlet-name><servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>KaptchaServlet</servlet-name><url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>
-
在表单中使用img标签显示验证码图片
访问该程序时,会自动在Session中设置验证码的字符串内容
- 在服务器处理表单的Servlet程序中检验Session中的验证码和表单中填写的验证码是否相同
String code = req.getParameter("code");
String token = (String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
if(token!=null && token.equalsIgnoreCase(code)){//提交成功的操作。。。
}
这篇关于【JavaWeb】5、Cookie、Session、kaptcha验证码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!