【JavaEE】5.会话技术 Cookie&Session

目录

1 会话技术

2 Cookie技术

2.1 Cookie应用

2.2 Cookie的特点和作⽤

3 Session技术

3.1 代码实现

3.2 session的特点


1 会话技术

浏览器第⼀次给服务器资源发送请求,会话建⽴,直到有⼀⽅断开为⽌的过程,称为⼀次会话。 会话技术就是记录这次会话中客户端的状态与数据的。⼀次会话中包含多次请求和响应。

功能:在⼀次会话的范围内的多次请求间,共享数据

⽅式:

客户端会话技术:Cookie

数据存储在客户端本地,减少服务器端的存储的压⼒,安全性不好,客户端可以清除 cookie

服务器端会话技术:Session

将数据存储到服务器端,安全性相对好,但会增加服务器的压⼒。

2 Cookie技术

Cookie技术是将⽤户的数据存储到客户端的技术,我们分为两⽅⾯学习:

1. 服务器端怎样将⼀个Cookie发送到客户端;

2. 服务器端怎样接受客户端携带的Cookie。

2.1 Cookie应用

如何添加Cookie

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置字符集
        resp.setContentType("text/html;charset=UTF-8");
        req.setCharacterEncoding("UTF-8");
        String name = "张三";
        /*name = new String(name.getBytes("ISO8859-1"), "UTF-8");*/
        name = URLEncoder.encode(name,"UTF-8");
//创建Cookie对象,绑定数据
        Cookie cookie1 = new Cookie("username", name);
        Cookie cookie2 = new Cookie("password","123456");
//发送Cookie对象
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);
    }

获取Cookie

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        req.setCharacterEncoding("UTF-8");
//获取cookies
        Cookie[] cookies = req.getCookies();
        if (cookies!=null) {
            for (Cookie cookie : cookies) {
                if (cookie.getName().equals("username")) {
                    String value = cookie.getValue();//输出cookie的key
                    value = URLDecoder.decode(value, "UTF-8");
                    resp.getWriter().write(value);
                }
            }
        }
    }

默认情况下,当浏览器关闭后,Cookie数据被销毁

持久化存储: setMaxAge(int seconds) 正数:将Cookie数据写到硬盘的⽂件中,并指定cookie存活时间, 时间到后,cookie⽂件⾃动失效

负数:默认值

0:删除cookie信息

默认情况下cookie不能共享 setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟⽬录如果要共享,则可以将path设置为"/" 。

cookie1.setMaxAge(300);
cookie3.setPath("/");

2.2 Cookie的特点和作⽤

特点:

1. cookie存储数据在客户端浏览器

2. 浏览器对于单个cookie 的⼤⼩有限制(4kb),以及对同⼀个域名下的总cookie数量也有限制 (20个)

作⽤:

1. cookie⼀般⽤于存出少量的不太敏感的数据

2. 在不登录的情况下,完成服务器对客户端的身份识别

3 Session技术

Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯⼀性标识JSESSIONID。

3.1 代码实现

HttpSession session = request.getSession();

HttpSession对象的三个方法:

Object getAttribute(String name)

void setAttribute(String name, Object value)

void removeAttribute(String name)

1.Session持久保存

当客户端关闭后,服务器不关闭,两次获取session不是同一个,如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最⼤存活时间,让cookie 持久化保存。

// JSESSIONID 持久化
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setPath(request.getContextPath());
cookie.setMaxAge(100 * 60);

2.钝化与活化

客户端不关闭,服务器关闭后,为确保数据不丢失。tomcat⾃动完成以下⼯作:

session钝化 :在服务器正常关闭之前,将session对象序列化到硬盘上。

活化 :在服务器启动后,将session⽂件转化为内存中的session对象。

3.Session生命周期

在以下三种情况下,session被销毁

服务器关闭 session

对象调⽤invalidate()

session到达默认失效时间

失效时间可在web.xml文件中修改:

<session-config>
 <session-timeout>30</session-timeout>
</session-config>

3.2 session的特点

1. session⽤于存储⼀次会话的多次请求的数据,存在服务器端

2. session可以存储任意类型任意⼤⼩的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值