Cookie和Session

Cookie饼干

a)什么是cookie

  • Cookie是服务器通知客户端保存键值对的一种技术
  • 客户端有了Cookie后,每次请求都发送给服务器
  • 每个Cookie的大小不能超过4kb

b)cookie的创建
在这里插入图片描述

 //创建cookie
        Cookie cookie = new Cookie("name","覃圣航");
        //通知客户端保存cookie
        resp.addCookie(cookie);

c)服务器如何获得cookie
务器获取客户端的cookie只需要一行代码:Cookie[] cookies = req.getCookies();
d)Cookie值的修改(修改后的值不允许是中文)
工具类

public class Cookil_util {
    public static Cookie findCookie(String name, Cookie[] cookie){
        if (name == null || cookie==null||cookie.length==0){
            return null;
        }
        for (Cookie cookie1 : cookie) {
            if (name.equals(cookie1.getName())){
                return cookie1;
            }
        }
        return null;
    }
}

方案一:
1、先创建一个要修改的同名Cookie对象
2、在构造器,同时赋于新的Cookie值
3、调用respose.addCookie(cookie);

//        1、先创建一个要修改的同名Cookie对象
//         >    2、在构造器,同时赋于新的Cookie值
        Cookie cookie = new Cookie("key1","newvalue1");
//         >    3、调用respose.addCookie(cookie);
        resp.addCookie(cookie);
        resp.getWriter().write("已经修改了key1的值");

方案二、
1、先查找需要修改的Cookie对象
2、调用setValue()方法赋予新的Cookie值
3、调用response.addCookie()通知客户端保存修改

//          > 1、先查找需要修改的Cookie对象
        Cookie key2 = Cookil_util.findCookie("key2", req.getCookies());
//                > 2、调用setValue()方法赋予新的Cookie值
        key2.setValue("newvlaue2");
//                > 3、调用response.addCookie()通知客户端保存修改
        resp.addCookie(key2);

f)Cookie的生命控制
cookie的生命控制指的是如何管理Cookie什么时候被销毁(删除)。
setMaxAge()方法

  • 正数,表示指定的秒数后过期
  • 负数,表示浏览器一关,cookie就会被删除(默认是-1)
  • 零,表示马上删除Cookie
Cookie key1 = Cookil_util.findCookie("key1", req.getCookies());
        key1.setMaxAge(0);
        resp.addCookie(key1);

g)Cookie有效路径Path的设置
在这里插入图片描述
练习:免用户名登陆
在这里插入图片描述
form-servlet

public class form extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html; charset=UTF-8");
        String username = req.getParameter("name");
        String password = req.getParameter("password");
        if ("q".equals(username) && "123456".equals(password)){
            resp.getWriter().write("登录成功");
            Cookie cookie = new Cookie("name",username);
            //一定呀设置setmaxage因为他的默认是-1,关闭浏览器就回消失
            cookie.setMaxAge(30*30*30);
            resp.addCookie(cookie);
        }else {
            resp.getWriter().write("登录失败");
        }

    }
}

form.jsp

<%--
  Created by IntelliJ IDEA.
  User: 29823
  Date: 2022/2/13
  Time: 22:05
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<!--
{cookie.name.value
cookie是el表达式中的隐式对象,得到一个cookie对象
cookie.name获取一个名字name的cookie对象
cookie.name.value获取一个name的value值
-->
<form action="/form" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="name" value="${cookie.name.value}"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" name="sumbit">
</form>
</body>
</html>

Session会话

a)什么是Session
*Session是一个接口(HttpSession).
Session就是会话。他是用来维护一个客户端和服务器之间关联的技术。
每个客户端都有自己的一个Session会话
Session会话中,我们经常用来保存用户登录之后的信息
*
b)如何创建Session和获取(id号,是否为新)
request.getSession()他第一次调用时,创建Session会话。之后的调用都是,获取前面创建好的Session会话对象。
isNew():判断到底是不是刚创建出来的。true 刚创建,flash 之前获得。
应为每个客户端都有自己的一个Session会话,所以每个会话都有一个身份证,也就是ID值。而且这个ID时唯一的。getID()得到Session的会话id值

 HttpSession session = req.getSession();
        //判断Seesion是不是刚好创建
        boolean aNew = session.isNew();
        String id = session.getId();
        resp.getWriter().write("创建了一个session");
        resp.getWriter().write("<br>"+"创建的这个Session是不是刚好创建"+aNew);
        resp.getWriter().write("<br>"+"创建这个的会话id时"+id);

c)Session域数据的存取

public void setSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        req.getSession().setAttribute("session1","value1");
        resp.getWriter().write("存成功");
    }
    public void getSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        String session1 = (String)req.getSession().getAttribute("session1");
        resp.getWriter().write(session1);
    }
}

d)Session生命周期控制
public void setmaxinactiveinterval(int interval)设置session的超时时间(以秒为单位),超过指定的时长,session就会被销毁。负数永不抄袭
public int getmaxinactiveinterval()获取session的超时时间.
public void invalidate()让当前Session会话马上无效

Session默认的超时时长为30分钟,因为在Tomact服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前tomcat服务器下所有的Session超时配置默认时长为30分钟。如果要修改如下
< session-config>
< session-timeout>20
< /session-config>

e)浏览器和Session之间关联的技术内幕
Session技术,底层其实时基于Cookie技术实现的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值