目录
0.会话技术
1:会话:一次会话中包含多次请求和响应。
一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
2:功能:在一次会话的范围内的多次请求建,共享数据
3:方式:
客户端会话技术:Cookie
服务器端会话技术:Session
1.创建Cookie,获取Cookie
@WebServlet("/demo00") public class MyServletDemo01 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { //创建第一个cookie对象 Cookie cookie1=new Cookie("uname","rocky"); // 创建第二个cookie对象 Cookie cookie2=new Cookie("uage","18"); //发送第一个cookie resp.addCookie(cookie1); //发送第二个cookie resp.addCookie(cookie2); //获得Cookies Cookie[] cookies = req.getCookies(); for (Cookie cookie : cookies) { System.out.println( cookie.getName() +"_____"+ cookie.getValue()); } } }
2.:Cookie在浏览器中保存多长
//创建第一个cookie对象 Cookie cookie1 = new Cookie("uname", "rocky"); //过期时间为10秒钟后 将cookie持久化到硬盘 cookie1.setMaxAge(10); // 关闭游览器cookie cookie1.setMaxAge(-1); //删除cookie的信息 cookie1.setMaxAge(0); //发送第一个cookie resp.addCookie(cookie1); }
3.:Cookie值中存在无效字符[32]
项目报错:java.lang.IllegalArgumentException:Cookie值中存在无效字符[32]
在Cookie中,某些特殊字符不能存在。例如:空格、逗号、等于号、双引号、斜杠等特殊符号
也可以尽量不在Cookie中存这些特殊字符,就可以避免此类问题。
我在cookie中存了逗号,所以报错了,在tomcat的根目录的conf目录context.xml加上下面的代码即可解决问题
<!-- 解决Cookie中不允许出现非法字符-->
1. 方法一<CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
2.方法二
还有另一种解决办法,存Cookie之前先将需要传的字符串编码,使用的时候在解码,需要用到下面的俩个方法(个人认为比较麻烦)
URLEncoder类的静态方法encode()
URLDecoder类的静态方法decode()String one=",,,,,";//全是逗号 //1.先编码 one=URLDecoder.decode(one,"utf-8") ; //2.存Cookie response.addCookie(new Cookie("name",one)); //3.后面需要获取Cookie中的one值,解码后再输出 one=URLDecoder.decode(one,"utf-8"); System.out.println(one);
4.案例:记住上一次访问的时间
@WebServlet("/CookieTest03") public class CookieTest03 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf8"); Cookie[] cookies = req.getCookies(); boolean is = false; for (Cookie cookie : cookies) { if (cookie.equals("lasttime")){ String value = cookie.getValue(); resp.getWriter().write("上次访问时间是"+value); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Date d = new Date(); String lasttime = sdf.format(d); Cookie cookie1 = new Cookie("lasttime",lasttime); resp.addCookie(cookie1); } } if (!is){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Date d = new Date(); String lasttime = sdf.format(d); Cookie cookie = new Cookie("lasttime",lasttime); resp.addCookie(cookie); resp.getWriter().write("第一次访问时间"+lasttime); } } }
5.遇到的bug