Cookie和Session

本文详细介绍了Cookie和Session在Web开发中的作用、工作原理、常用方法以及它们的区别和联系,包括存储位置、容量限制、持久性、安全性和应用场景。

cookie

cookie是什么

cookie的常用方法

cookie总结

session

为什么使用session?

session是什么?

session的常用方法

session总结


        会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份Session通过在服务器端记录信息确定用户身份

cookie是什么

  1. cookie是在浏览器中保存的

  2. 如果想要使用cookie要保证我们的浏览器是开启cookie,所以说有一定的弊端,如果浏览器没有开启cookie,就不能再使用cookie了

  3. cookie的大小是有限制的,通常是4096byte

  4. cookie的保存是以键值对的形式存在的

cookie的常用方法

//1.cookie的构造方法,目的是实例化出来cookie对象
Cookie(String name,String value)
//2.设置cookie的方法
setValue(String value) //修改cookie的值
getValue(String value) //获得cookie的值    
getName(String value) //获得cookie的键    
setMaxAge(int time) //设置cookie的有效时间
//3.要将cookie发送到浏览器
response.addCookie(Cookie cookie);
//4.获得所有cookie
request.getCookies();

实例

SetCookieServlet类

public class SetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * 1.创建cookie对象
         *     将键:java2311 值:sb ,存到cookie对象中
         */
        Cookie cookie = new Cookie("msg", "sb");
        /**
         * 2.设置有效时间
         *    正数:表示当前cookie的有效时间
         *    负数:表示当前浏览器打开的时候存在,关闭的时候没了
         *     0:销毁当前的cookie
         */
        cookie.setMaxAge(60*60*24);//设置了有效期是个正数,
        //3.把cookie发送到浏览器
        resp.addCookie(cookie);
    }
}

web.xml

<servlet>
        <servlet-name>setCookieServlet</servlet-name>
        <servlet-class>com.by.servlet.SetCookieServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>setCookieServlet</servlet-name>
        <url-pattern>/setCookieServlet</url-pattern>
    </servlet-mapping>

结果

GetCookieServlet类

public class GetCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取浏览器中cookie,返回值是一个数组
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            System.out.println("==============");
            System.out.println(cookie.getName());//获取键
            System.out.println(cookie.getValue());//获取值
        }
    }
}

web.xml

 <servlet>
        <servlet-name>getCookieServlet</servlet-name>
        <servlet-class>com.by.servlet.GetCookieServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>getCookieServlet</servlet-name>
        <url-pattern>/getCookieServlet</url-pattern>
    </servlet-mapping>

结果

DestroyCookieServlet类

public class DestroyCookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        //退出登录
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if (cookie.getName().equals("msg")){
                cookie.setMaxAge(0);//销毁cookie
                //重新发送给浏览器
                response.addCookie(cookie);
            }
        }
    }
}

web.xml

 <servlet>
        <servlet-name>destroyCookie</servlet-name>
        <servlet-class>com.by.servlet.DestroyCookieServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>destroyCookie</servlet-name>
        <url-pattern>/destroyCookie</url-pattern>
    </servlet-mapping>

结果

cookie总结


        1)是什么
            保存在浏览器的一块存储区域
        2)特点
            ②键值对
            ③可以禁用cookie
            ④最多存4096byte
            ⑤可设置过期时间

session

为什么使用session?

  1. cookie保存数据类型是单一的,只能保存字符串类型的数据

  2. cookie的大小有限制

session是什么?

保存服务器中

当用户发送一个HTTP请求到服务器时,服务器会检查该请求是否包含session标识符(通常是存cookie),如果没有,则会创建一个新的session(存储区域),并将session标识符发送给客户端。浏览器再发送请求时会携带session标识符,此时服务器根据session标识符就可以找到对应的session(存储区域)

使用session的时候一般要开启cookie如果浏览器没有开启cookie功能,我们可以通过html的url传参完后session的使用

没有大小的限制

信息的保存也是以键值对的形式存在的

session的常用方法

request.getSession(true); //返回HttpSession
setAttribute(key,value); //设置属性 key ,value
getAttribute(key); //获取key的值
removeAttribute(String key)    //通过key值删除数据
invalidate(); //将session中的变量全部清空
setMaxInactiveInterval(int interval); //设置session失效时间,单位为秒
getMaxInactiveInterval();//获取session失效时间
getId(); //获取sessionID

实例

SetSessionServlet类

public class SetSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得session
        HttpSession httpSession = req.getSession();
        //获得sessionid
        String sessionId = httpSession.getId();
        System.out.println("sessionId:" + sessionId);

        User user = new User();
        user.setUsername("张5丰");
        user.setBirthday(new Date());
        user.setSex("1");

        //往session中添加属性
        httpSession.setAttribute("user", user);
        //设置session的失效时间
        httpSession.setMaxInactiveInterval(60*5);
    }
}

web.xml

 <servlet>
        <servlet-name>setSessionServlet</servlet-name>
        <servlet-class>com.by.servlet.SetSessionServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>setSessionServlet</servlet-name>
        <url-pattern>/setSessionServlet</url-pattern>
    </servlet-mapping>

结果

GetSessionServlet类

public class GetSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得session
        HttpSession httpSession = req.getSession();
        //获得session中的属性
        User user = (User) httpSession.getAttribute("user");
        System.out.println(user);
    }
}

web.xml

<servlet>
        <servlet-name>getSession</servlet-name>
        <servlet-class>com.by.servlet.GetSessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>getSession</servlet-name>
        <url-pattern>/getSession</url-pattern>
    </servlet-mapping>

结果

DestroySessionServlet类

public class DestroySessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得session
        HttpSession httpSession = req.getSession();
        //session失效
        httpSession.invalidate();
    }
}

web.xml

<servlet>
        <servlet-name>destorySession</servlet-name>
        <servlet-class>com.by.servlet.DestroySessionServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>destorySession</servlet-name>
        <url-pattern>/destorySession</url-pattern>
    </servlet-mapping>

结果

session总结


        1)是什么
            是一个域对象,保存在服务器
        2)特点
            ①键值对
            ②可设置过期时间
            ③失效:过期或关闭浏览器

Cookies和Sessions的区别和联系

Cookies和Sessions是Web开发中常用的两种技术,用于在客户端和服务器之间保持状态信息。它们之间的主要区别如下:

  1. Cookies(Cookie)

    • 存储位置:Cookies存储在客户端(用户的浏览器)中,以文本文件的形式存在。
    • 容量限制:每个Cookie的大小通常受到限制,通常为4KB。
    • 持久性:Cookies可以设置过期时间,可以是会话级的(浏览器关闭后失效)或持久性的(在一定时间后失效)。
    • 安全性:Cookies可以被篡改,因此对于敏感信息的存储需要谨慎处理。
    • 用途:常用于存储少量的用户信息、用户偏好设置、跟踪用户行为等。
  2. Sessions(会话)

    • 存储位置:Sessions存储在服务器端,通常在服务器的内存中或数据库中。
    • 容量限制:Sessions的大小受服务器内存或数据库容量的限制。
    • 持久性:Sessions通常在用户关闭浏览器或一定时间后失效,可以持久保持用户状态。
    • 安全性:Sessions相对于Cookies更安全,因为存储在服务器端,客户端无法直接访问和修改。
    • 用途:Sessions通常用于存储用户的登录状态、购物车信息、会话数据等。

关系

  • 通常,Cookies中会包含一个用于标识用户会话的唯一标识符(如Session ID),而这个Session ID对应于服务器端存储的会话数据。
  • 当用户第一次访问网站时,服务器会创建一个会话,并将会话ID存储在Cookie中发送给客户端。客户端在后续请求中通过Cookie中的会话ID来识别自己的会话。
  • 服务器根据会话ID来检索相应的会话数据,从而实现跟踪用户状态和保持用户登录状态等功能。

总的来说,Cookies存储在客户端,容量较小,持久性较强,可以被篡改;而Sessions存储在服务器端,容量较大,相对更安全,用于保持用户状态和存储会话数据。在实际应用中,通常会结合使用Cookies和Sessions来实现不同的功能需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涵冰...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值