JavaWeb —— 会话技术(Cookie,Session)

JavaWeb —— 会话技术(Cookie,Session),第1张

前言 :

什么是会话?

会话是指浏览器访问服务器,访问结束关闭浏览器

为什么需要会话技术?

http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,服务器不能确认多次请求是否来自与同一个客服端,如果说我们要实现购物车添加或删除商品的功能的话,我们就需要使用到Cookie和Session技术。Cookie和Session是域对象。

目录

Cookie(一次会话中多次请求间数据共享问题)

Cookie细节:

Cookie存储中文(Cookie不支持中文,要进行编码解码)

Session

Session细节:

Session销毁

Cookie 和 Session区别


具体实现:

例如我们在淘宝页面登录我们自己的账号,下次登录时我们就不需要再次输入账号和密码,直接就可以登录了。这是怎么做到的呢具体实现是使用到了会话技术(Cookie,Session),第一次输入账号密码登录时,我们会将数据提交到服务器,服务器会生成一个CookieId(Cookie数据),返回给客户端,下次登录时,客户端会将CookieId(Cookie数据)携带给浏览器,服务器会根据CookieId来识别是否是同一个客户端。

Cookie(一次会话中多次请求间数据共享问题)

作为后端程序员我们只需要学会Cookie的基本使用(获取Cookie和发送Cookie)

 

1 发送 Cookie

Cookie cookies = new Cookie("key","value");//获取Cookie对象
response.addCookie(cookies);//发送Cookie

2 获取Cookie对象

request.getCookie();//获取Cookie数组
for (Cookie cookie : cookies)//遍历Cookie
    if("username".equals(name)) {//取出自己想要的Cookie
        String value = Cookie.getValue();
        System.out.println(name + value);
    }
    

Cookie细节:

细节 :

设置Cookie的存活时间(在发送对象前)

  1. 整数表示将Cookie写入浏览器所在本机硬盘中,持久化存储

  2. 负数表示关闭浏览器,Cookie对象将会被销毁

  3. 0表示将删除Cookie对象

cookies.setMAXAge(min) 

 

 

Cookie存储中文(Cookie不支持中文,要进行编码解码)

在获取Cookie数据前编码

package cookie;/**
 * @author 三月水
 * version  0.5
 * 演示客服端会话技术
 */

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLEncoder;

@WebServlet("/aservlet")
public class Aservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Cookie对象
        String value = "张三";

        value = URLEncoder.encode(value,"utf-8");
        System.out.println("存储数据"+value);

        Cookie cookie = new Cookie("username",value);
      
        //发送Cookie
        response.addCookie(cookie);
    }

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

在获取Cookie数据后解码

package cookie;/**
 * @author 三月水
 * version  0.5
 */

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.net.URLDecoder;

@WebServlet("/Bservlet")
public class Bservlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取cookie

        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            String name = cookie.getName();
            if ("username".equals(name)) {
                String value = cookie.getValue();
                //获取数据之后解码
                value = URLDecoder.decode(value, "utf-8");

                System.out.println(name + ":" + value);
            }

            break;
        }
    }

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

 核心编解码方法

URLEncoder.encoder(value,"字符集");//编码
URLDecoder.decoder(value,"字符集");//解码

Session

Session是基于Cookie的,Session实现了HttpSession。

基本使用:

@WebServlet("/demo1")
HttpSession session = request.getSession();//获取Session对象
seession.setAttribute("key","value");

@WebServlet("/demo2")
HttpSession session = request.getSession();//获取Session对象 这里Session对象是同一个
seession.getAttribute("key");

怎么知道他们的Sesion对象是同一个呢?(可以输出session引用,对比地址值)

 

Session细节:

1.服务器关闭了,Session会被关闭吗? (不会)

钝化 :服务器正常关闭后,Tomcat会自动将Session数据写入硬盘文件中

活化 :再次启动服务器后,会从文件中加载数据到Session中

 

Session销毁

默认销毁时间为30分钟,可以再xml配置中,修改销毁时间一般修改为100分钟

1 web.xml文件中添加配置

    100 

2 Session.invalidate();//销毁

 

Cookie 和 Session区别

安全性 : Cookie 不安全(存储客户端,经常通过HTTP协议传输数据到服务器)

Session 安全 (存储在服务器)

数据大小 :

Cookie 大小限制3kb

Session 大小无限制

存活时间:

Cookie 长期存活(几个月至1年)

Session 存活(默认30分钟)

服务器性能:

Cookie不占用服务器资源

Session占用服务器资源

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/876580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存