Cookie和Session会话技术

Cookie和Session会话技术

1. 一次会话包含多次请求和响应
2. 一次会话:直到有一方断开连接(会话的功能)
3. 会话的功能:**共享数据的**
4. 客户端会话技术:Cookie
5. 服务器端:Session

快速入门

1. 创建Cookie对象绑定数据new Cookie()
2. 发送cookie对象 response.addCookie()
3. 获取Cookie request.getCookie() 

会话Cookie原理

  1. 客户端发送请求 ,服务器端接受请求 响应中响应头中包含了(set-cookie:msg=hello)
  2. 客户端接收到response之后会自动保存这个响应信息(msg=hello)
  3. 在下一次请求中 请求头中cookie:msg=hello,带着这个信息再次访问服务器
  4. 基于响应头set-cookie和请求头cookie来实现的

    cookie的细节


1. 一次可以发送多少个cookie(多个Cookie)
    `@WebServlet("/CookieServletDemo3")
public class CookieServletDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Cookie cookie = new Cookie("msg","hello");
    Cookie cookie1 = new Cookie("name", "zhangsan");
    response.addCookie(cookie);
    response.addCookie(cookie1);

}

`


2. cookie在浏览器中保存多长时间
    1. 默认情况下:浏览器关闭之后, Cookie被销毁
    2. 设置Cookie生命周期 持久化存储
    3. setMaxAge(int seconds)正数,负数,零 (参数存活时间)  参数为零 代表删除Cookie信息 正数:持久化到磁盘中

@WebServlet ("/CookieServletDemo4")
public class CookieServletDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Cookie cookie = new Cookie("msg","hello");
   // cookie.setMaxAge(100);//设置为正数, 持久化磁盘一百秒 之后自动删除
    //cookie.setMaxAge(0); //设置为零 删除cookie
    cookie.setMaxAge(-1);//设置为负数, 关闭流浏览器就销毁或者会话结束
    response.addCookie(cookie);

    System.out.println("CookieServletDemo1");

` 3. cookie能不能存中文 4.


    1. 在Tomcat8之后 cookie中可以存放中文数据
    2. 之前的使用URL编码就可以了(%E3)

4. cookie获取的范围:
    1. 在一个Tomcat服务器中,部署了多个Cookie 默认是不可以被其他web项目共享的
    2. Cookie.setPath(path') 在path目录下就可以共享这个Cookie。如果是要共享 cookie.setPath("/") 就可以共享了 
    3. 不同tomcat服务器之间cookie是可以共享的cookie.setDomain(".baidu.com")// 一级域名相同就可以共享

Cookie的特点

1. cookie存储数据存储在客户端
2. 浏览器对于单个cookie的大小有限制(大约是4kb左右), 同一个域名存取的总数量也有限制(20个左右)
3. 数据不安全,不能存取大量数据,存取不太敏感不重要的数据
4. 在不登录的情况下, 完成服务器对客户端身份证的识别

关于Cookie的案例

1. 记住上一次访问的时间
2. 访问一个servlet 如果是第一次访问 提示:你好,欢迎你首次登陆
3. 如不是的一次登陆, 则提示:欢迎回来,你上次的访问时间是:显示时间字符串:

`package CookieDemo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author: Lbaci
 * @description:
 * @createDate: 2019/9/26
 */
@WebServlet("/LoggerServlet")
public class LoggerServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    //获取cookie
    Cookie[] lastTimes = request.getCookies();
    boolean flag= false;
    if (lastTimes.length>0&&lastTimes!=null){
        for (Cookie cookie : lastTimes) {
            String name = cookie.getName();
            if ("lastTime".equals(name)){
                flag=true;
                //有这个cookie 不是第一次访问

                Date date = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
                String str_data = sdf.format(date);

                //发送cookie
                System.out.println(str_data);
                 str_data = URLEncoder.encode(str_data, "utf-8");
                System.out.println(str_data);
                cookie.setValue(str_data);
                //h获取当前时间重新设置cookie 重新发送cookie
                response.addCookie(cookie);
                //设置cookie的存活时间
                cookie.setMaxAge(99999);
                String value = cookie.getValue();
                System.out.println("解码前"+value);
                //解码
                value= URLDecoder.decode(value, "utf-8");
                response.getWriter().write(""+"欢迎回来,你上次的访问时间是:"+value+"");
                break;
            }
            if (lastTimes==null ||lastTimes.length==0|| flag==false){
                //没有这个cookie

                Date date = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
                String str_data = sdf.format(date);
                //h获取当前时间重新设置cookie 重新发送cookie
                //编码:
                URLEncoder.encode(str_data,"utf-8");
                cookie.setValue(str_data);
                Cookie cookie1 = new Cookie("lastTime",str_data);
                //设置cookie的存活时间
                cookie1.setMaxAge(99999);
                //发送cookie
                response.addCookie(cookie1);
                response.getWriter().write(""+"你好,欢迎首次访问");
            }
        }
    }

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doPost(request, response);
}

} `

你可能感兴趣的:(Java,ee,开发)