首页 /  技术专区  /  JavaWeb 宽屏模式 >

Cookie

1、会话

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;

有状态会话: 一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;


一个网站,怎么证明你来过?

客户端

服务端

1.服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了; cookie

2.服务器登记你来过了,下次你来的时候我来匹配你; seesion


2、保存会话的两种技术

cookie

●客户端技术 (响应,请求)

session

●服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或者数据放在Session中!


常见常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!


3、Cookie

1.从请求中拿到cookie信息

2.服务器响应给客户端cookie

Cookie[] cookies = req.getCookies(); //获得cookie

cookie.getName(); //获得cookie中的key

cookie.getValue(); //获得cookie中的value

new Cookie("lastLoginTime", System.currentTimeMillis() + ""); //新建一个cookie

cookie.setMaxAge(24*60*60); //设置cookie有效期

resp.addCookie(cookie); //响应客户端一个cookie


一个网站cookie是否存在上限!聊聊细节问题

●一个Cookie只能保存一 个信息;

●一个web站点可以给浏览器发送多个cookie, 最多存放20个cookie;

●Cookie大小有限制4kb;

●300个cookie浏览器上限


删除Cookie;

●不设置有效期,关闭浏览器,自动失效;

●设置有效期时间为0 ;


编码解码:

URLEncoder.encode("李庆林","utf-8");

URLDecoder.decode(cookie. getValue(),"UTF-8");


代码:

pom依赖:

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>4.0.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>javax.servlet.jsp-api</artifactId>
  <version>2.3.3</version>
  <scope>provided</scope>
</dependency>

CookieDemo001:

package com.allen.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class CookieDemo001 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //解决中文乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        resp.setContentType("text/html");

        PrintWriter out = resp.getWriter();

        //Cookie,服务器从客户端获取
        Cookie[] cookies = req.getCookies();

        //判断Cookie是否存在
        if(cookies != null){
            //如果存在怎么办
            out.write("你上一次访问的时间是:");

            for(int i = 0; i < cookies.length; i++){
                Cookie cookie = cookies[i];
                //获取cookie的名字
                if(cookie.getName().equals("lastLoginTime")){
                    //获取cookie中的值
                    long lastLoginTime = Long.parseLong(cookie.getValue());
                    Date date = new Date(lastLoginTime);
                    out.write(date.toLocaleString());
                }
            }

        }else{
            out.write("这是您第一次访问本站!");
        }

        //服务器给客户端响应一个cookie
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

web.xml

<servlet>
    <servlet-name>CookieDemo001</servlet-name>
    <servlet-class>com.allen.servlet.CookieDemo001</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>CookieDemo001</servlet-name>
    <url-pattern>/c1</url-pattern>
</servlet-mapping>

测试:

image.png


头像
0/200
图片验证码