2021-11-25 Cookie和Session

本文探讨了Cookie在保持用户登录状态、记录浏览行为和购物车管理中的应用,同时指出了其安全问题及解决方案。Session作为Cookie的升级版,介绍了会话创建与销毁机制,以及如何在服务器端存储和管理数据以增强安全性。
摘要由CSDN通过智能技术生成

目录

1、Cookie

为什么要有这个Cookie

Cookie怎么用

简单使用:

常用方法

2、session

方法


1、Cookie

应用场景

自动登录、浏览记录、购物车。

为什么要有这个Cookie

http的请求是无状态。 客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。 为了更好的用户体验,更好的交互 [自动登录],其实从公司层面讲,就是为了更好的收集用户习惯[大数据]

Cookie怎么用

简单使用:

  • 添加Cookie给客户端

  1. 在响应的时候,添加cookie

Cookie cookie = new Cookie("aa", "bb");

   //给响应,添加一个cookie
   response.addCookie(cookie);

    2.客户端收到的信息里面,响应头中多了一个字段 Set-Cookie

常用方法

    //关闭浏览器后,cookie就没有了。 ---> 针对没有设置cookie的有效期。
    //  expiry: 有效 以秒计算。
    //正值 : 表示 在这个数字过后,cookie将会失效。
    //负值: 关闭浏览器,那么cookie就失效, 默认值是 -1
    cookie.setMaxAge(60 * 60 * 24 * 7);
    
    //赋值新的值
    //cookie.setValue(newValue);
    
    //用于指定只有请求了指定的域名,才会带上该cookie
    cookie.setDomain(".itheima.com");
    
    //只有访问该域名下的cookieDemo的这个路径地址才会带cookie
    cookie.setPath("/CookieDemo");
//清除Cookie, 删除cookie是没有什么delete方法的。只有设置maxAge 为0
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
​
        //创建对象
        Cookie cookie = new Cookie("name","zyw");
        cookie.setPath("/");
        cookie.setMaxAge(10); //秒
        //Response给客户端 响应Cookie
        resp.addCookie(cookie);
        resp.sendRedirect("/show.jsp");
    }
<body>
    <%--读取本地cookie中数据
    cookie内置对象.key.value
    key 对应你自己设置的名
    --%>
    <input value="${cookie.name.value}"/>
</body>
  • 获取客户端带过来的Cookie

//获取客户端带过来的cookie
    Cookie[] cookies = request.getCookies();
    if(cookies != null){
        for (Cookie c : cookies) {
            String cookieName = c.getName();
            String cookieValue = c.getValue();
            System.out.println(cookieName + " = "+ cookieValue);
        }
    }

2、session

Cookie的安全问题。

由于Cookie会保存在客户端上,所以有安全隐患问题。 还有一个问题, Cookie的大小与个数有限制。 为了解决这个问题 ---> Session .

Session

会话 , Session是基于Cookie的一种会话机制。 Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。 Session是,数据存放在服务器端。

Session何时创建 , 何时销毁?

  • 创建

如果有在servlet里面调用了 request.getSession()

  • 销毁

session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。

  1. 关闭服务器
  2. session会话时间过期。 有效期过了,默认有效期: 30分钟。

方法

//得到会话ID
    String id = session.getId();
//存值
session.setAttribute(name, value);
​
//取值
session.getAttribute(name);
​
//移除值
session.removeAttribute(name);

例子

@Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
​
        String username = req.getParameter("username");
        String password = req.getParameter("password");
​
        String path = "";
        if("zyw".equals(username) && "123".equals(password)){
            //通过request对象获取 session对象
            HttpSession session = req.getSession();
            //在session对象中存储一个数据,通常是用户名
            session.setAttribute("username",username);
            path = "/session/show.jsp";
        }else{
            path = "/session/index.jsp";
        }
        resp.sendRedirect(path);
    }
  <body>
​
    <form action="/login" method="post">
      <input name="username"/>
      <input type="password" name="password"/>
      <input type="submit"/>
    </form>
  </body>
<body>
    <c:if test="${username == null}">
        <c:redirect url="/index.jsp"/>
    </c:if>
​
    <h2>show: 欢迎:${sessionScope.username}</h2>
</body>

session手动销毁:

session.invalidate();//销毁服务器端的session(做账号退出,注销登录)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值