会话跟踪技术(Cookie与Session的介绍)

会话跟踪技术(Cookie与Session的介绍)

一、会话跟踪技术

   会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。

   会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据。

   HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享。
会话跟踪技术(Cookie与Session的介绍)_第1张图片

二、Cookie

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问

1、Cookie的基本使用

//发送Cookie
	//   1、创建Cookie对象,设置数据
	Cookie cookie=new Cookie("key","value");
	//发送Cookie到客户端,使用response对象
	response.addCookie(cookie);
//获得Cookie
	//	3、获取用户所携带的Cookie,使用request对象
	Cookie[] cookies = req.getCookies();
	//	4、遍历数组,获取每一个Cookie信息
	for (Cookie cookie:cookies) {}
	//	5、使用Cookie对象的方法获取数据
	String name = cookie.getName();
    String cookieValue = cookie.getValue();
	

2、Cookie的原理与使用细节

Cookie的原理:Cookie的实现是基于Http协议的

  • 响应头:set-cookie
    会话跟踪技术(Cookie与Session的介绍)_第2张图片
  • 请求头:cookie
    会话跟踪技术(Cookie与Session的介绍)_第3张图片

请求过程图解
会话跟踪技术(Cookie与Session的介绍)_第4张图片
Cookie的使用细节

  • Cookie存活时间

默认情况下,Cooked存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁。
setMaxAge(int seconds):设置Cookie存活时间
      正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除.
      负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
      零:删除对应Cookie

  • Cookie存储中文

11111

@WebServlet("/cookieDemo1")
public class CookieDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        /*当Cookie存储的值为中文时,服务器回发生报错
                解决思路:在创建Cookie对象前,采用URL编码,
                然后以中文编码后的信息存入到Cookie对象中,
                使用Cookie获得值后进行解码,从而获得所需的中文信息
         */
        String value="张三";
        value= URLEncoder.encode(value,"UTF-8");
        Cookie cookie1=new Cookie("username",value);

        resp.addCookie(cookie1);


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
}


@WebServlet("/CookieDemo2")
public class CookieDemo2 extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie:cookies) {
            String value = cookie.getValue();
            value= URLDecoder.decode(value); //解码
            if ("zs".equals(value)){
                String name = cookie.getName();
                System.out.println(name+"  :"+value);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
}

三、Session

session的基本使用

Session服务端会话技术:将数据保存到服务端
JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享

// 1.获取Session对象
	HttpSession session=request.getSession();
//2.Session对象功能
	void setAttribute(String name,Object o);//存储数据到session域中
	Object getAttribute(String  name);//根据key,获取值
	void removeAttribute(String name);//根据key,删除改键值对

session的使用原理&细节

  • Session的使用原理
    session是基于Cookie实现的
    set-cookie:JSESSIONID=xxxxx
    cookie:JSESSIONID=xxxx
    会话跟踪技术(Cookie与Session的介绍)_第5张图片
  • Session的使用细节
    a:Session钝化、活化
    钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
    活化:在此启动服务器,从文件中加载数据到Session中
    b:Session的销毁
//默认情况下,无操作,30分钟自动销毁
<session-config>
        <session-timeout>30</session-timeout>
</session-config>
//调用Session对象的invalidate()方法
session.invalidate();

四、Cookie和Session的优缺点&使用场景

Cookie和Session都是来完成一次会话的多次请求间数据的共享的

Cookie和Session的区别:

  • 存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
  • 安全性:Cookiebuanq,Session安全
  • 数据大小:Cookie最大3KB,Session无大小限制
  • 存储时间:Cookie可长期保存,Session默认30分钟
  • 服务器性能:Cookie不占服务器资源,Session占用服务器资源

Cookie和Session的使用场景:

  • Cookie:记住账号信息,购物车
  • Session:个人信息显示,验证码

你可能感兴趣的:(servlet,java,服务器)