(十二)、Cookie
36.会话
1.会话定义: 会话打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器这个过程 可以称之为会话。 2.有状态会话: 服务端Session先给小朋友A发了一个邀请函Cookie,这就证明小朋友A可以来参加 Session聚会,并且有留存登入聚会的信息,曾经来过,就叫做有状态会话。
37.保存会话的两种技术
1.cookie: (1).客户端技术:(响应,请求) 2.session: (1).服务器技术: 利用这个技术可以保存会话的用户信息,我们可以把信息或则数据 放在session里面 3.常见的应用: 网站登入之后,下次就不用登入了,第二次直接登入 4.一个网站cookie是否存在上限? (1).一个cookie只能保存一个信息 (2).一个web站点可以给浏览器发送多个cookie,最多存放20个cookie; (3).300个cookie浏览器上限 (4).Cookie大小有限制4kb 5.删除cookie: (1).不设置有效期,关闭浏览器,自动失效 (2).设置有效期为0
1.请求获得cookie: Cookie[] cookies = req.getCookies(); 2.获得cookie的键key cookie.getName() 3.获得cookie的值value cookie.getValue(); 4.将字符串参数解析为带符号的十进制 long parseLong(String s) 5.创建一个cookie key 和 value Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+""); 6.cookie的生存期 cookie.setMaxAge(24*60*60); 7.响应给客户端cookie resp.addCookie(cookie);
package com.Jsxs.Cookie; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; //保存用户上一次访问的时间 public class Demo1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 服务器告诉你来的时间,把这个时间封装成为一个信件,你带来信件,我就知道是你来了 resp.setCharacterEncoding("utf-16"); req.setCharacterEncoding("utf-16"); PrintWriter out = resp.getWriter(); // cookie,是服务端从客户端获取,客户端需要请求服务端先得到cookie Cookie[] cookies = req.getCookies(); //这里返回一个数组,说明存在多个。 // 判断cookie数组是否存在 if (cookies != null){ // 如果存在了怎么办? out.write("您上一次访问的时间是:"); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("lastLoginTime")){ // 获取cookie中的值 long l = Long.parseLong(cookie.getValue()); Date date = new Date(l); out.write(date.toLocaleString()); } } }else { out.write("您第一次访问本次网站,我们将会对您的信息进行详细的保存"); } // 服务器相应一个cookie Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+""); cookie.setMaxAge(24*60*60); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
再创建一个DEMO2,并且创建一个cookie的key,一定要和demo1的key相等,进行替换的操作。 • 1
package com.Jsxs.Cookie; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class Demo2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+""); cookie.setMaxAge(0); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
38.编码和解码(养成习惯)
编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程。
1.编码: String string=URLEncoder.encode("字符串","utf-8") 2.解码: String string=URLDecoder.decode("字符串","UTF-8") 3.JSP文件上写: <%@ page contentType="text/html;charset=UTF-8" language="java" %>
package com.Jsxs.Cookie; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.net.URLDecoder; import java.net.URLEncoder; public class Demo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("utf-16"); req.setCharacterEncoding("utf-16"); PrintWriter out = resp.getWriter(); Cookie[] cookies = req.getCookies(); if(cookies!=null){ out.write("您带了小饼干,我很欢迎"); for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookie.getName().equals("name")){ System.out.println(URLDecoder.decode(cookie.getValue(),"UTF-8")); } } }else { out.write("第一次登入还没创建到cookie"); } Cookie cookie = new Cookie("name", URLEncoder.encode("吉士先生","UTF-8")); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }