jsp-Cookie与HttpSession对象

本文深入讲解了Cookie和Session的工作原理及应用。包括Cookie的创建、发送、接收等流程,以及如何处理中文存储问题。同时详细介绍了Session的生命周期管理、有效时间和钝化活化机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1: Cookie技术 (数据保存浏览器)
    1): 应用场景(自动登录)
    2): 创建Cookie
        可以直接new  如: Cookie cookie = new Cookie("name","123");
    3): 向浏览器添加发送Cookie
        response.addCookie(cookie);
    4): 服务端接收浏览器上的cookie信息
         request.getCookies();
    5): Cookie的存储与读取的过程
        a): 在服务端创建一个cookie, 如: Cookie cookie = new Cookie("name","123");
        b): 然后再添加到响应信息发送到浏览器,  如: response.addCookie(cookie);
            在发送的响应信息就会有一个set-Cookie响应头信息
        c): 浏览器通过解析响应信息,把Cookie信息保存到浏览器客户端
        d): 而浏览器在下次访问服务器时,则会把Cookie信息带过去,即在请求信息里会有一个Cookie请求头
        e): 服务端即可获取浏览器带过来的Cookie信息,  如: request.getCookie();
     6): Cookie对象相关方法(设置与获取)
        setPath(uri)            设置cookie的有效访问路径
        setMaxAge(int expiry)   设置cookie的有效时间
        setValue()              设置cookie的值
        getValue()              获取cookie的值
        getName()               获取cookie的名
     7): Cookie的有效时间
        方法: setMaxAge(int expiry)  (如: cookie.setMaxAge(60*60*24))
        a): 值为正整数时   表示Cookie的有效时间
        b): 值为负整数时   表示 Cookie的过期时间为会话结束时,(如:浏览器关闭就清除cookie)
        c): 值为0时        表示立即删除cookie
     8): 设置Cookie的有效路径
        如果有设置,浏览器只有在这个路径下访问服务端,才会带上cookie
     9): 设置cookie保存中文问题
        因为cookie中不能存储中文,如果想要保存中文,则需要我们另外做一些处理
        String value = URLEncoder.encode("二哈","utf-8"); 先对要保存的中文进行下编码然后存入到Cookie中
        String value = URLDecoder.decode(cookie.getValue(), "utf-8"); 获取时则需要再解码才能得到中文
     ps: Cookie存储有大小限制


2: Session技术(session对象为域对象之一)
    1): session保存的数据是在服务端(内存中)
    2): 获取session对象
        HttpSession session = request.getSession();
    3): 浏览器与session域对象
        a): 当浏览器第一次访问创建session的servlet时, 这时则会创建一个session对象,且分配一个唯一的JSESSIONID。如: JSESSIONID=3102F886DCB5980C9B0939F14211E6D1; 把这个session保存到内存中
        b): 接着把这个JSESSIONID=3102F886DCB5980C9B0939F14211E6D1带回浏览器,保存到浏览器中cookie中
        c): 当浏览器再次访问服务器时,则会把那个JSESSIONID带上,服务端则可以通过浏览器带上的这个JSESSIONID找到内存中相应的那个session对象
    4): 关于session的创建
        可以通过 request.getSession(); 来获取到一个session。
        ps: 首先会通过浏览器带过来的JSESSIONID到内存里去找是否有这个JSESSIONID匹配的session对象,如果有则把匹配到的那个session对象返回,如果没有则创建一个新的session对象。
    5): 相关方法
        request.getSession();                   
        reqeust.getSession(boolean create);     
        setMaxInactiveInterval(int interval)    设置session的有效时间
        invalidate()                            销毁session对象
        getId()                                 得到session编号
        setAttribute()                          保存数据
        getAttribute()                          获取数据
        removeAttribute()                       清除数据

    6): reqeust.getSession(boolean create); 
        如果参数值是false,即如果在内存里没有找到相匹配的那session对象,则也不会再创建新的session了

    7): session的过期时间
        session会有一个默认的过期时间为30分钟,我们可以通过setMaxInactiveInterval(int interval)方法来设置它的这个值。
        如: session.setMaxInactiveInterval(20); 单位是秒,从最后一次访问开始计算
        还可以设置全局的session过期时间,在web.xml中进行配置(改完配置文件,需要重新启动下。)
        如:  <session-config>
                <session-timeout>1</session-timeout>
            </session-config>
    ps: 当服务器关闭时,内存里的session会被清掉,但是这时会在电脑硬盘上保存一个session的文件
        如:F:\apache-tomcat-7.0.82\work\Catalina\localhost\day08\SESSIONS.ser, 当然服务器再次启动时,则会把这个文件加载到内存里,所以再次访问时依然能访问到。如果服务器关掉,就把这些session销毁掉,可以在Context.xml配置文件中加上 <Manager pathname="" /> 可以阻止这个过程

    8): session的钝化与活化
        在Context.xml配置文件中,加上如下配置
            <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
                <Store className="org.apache.catalina.session.FileStore" directory="mysession" />
            </Manager>


        当页面过了1分钟没有操作的话则session会被钝化,从内存取出保存到文件中,
        当再次操作时 session则会再次加到内存中,这个过程叫session的活化

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值