什么是cookie_1

本文详细介绍了Cookie的工作原理,包括其在客户端和服务器端的存储方式,创建、读取的方法,以及与Session的区别。重点讲述了如何使用Cookie实现简单的登录功能,并探讨了它们的生命周期和数据持久性。
摘要由CSDN通过智能技术生成

一、什么是cookie

cookie在客户端存储,session在服务端存储

一旦浏览器保存了某一个cookie,在之后的响应的请求于回应种,cookie会跟着请求传到服务端,然后跟着响应传回客户端 ,跟着request和response传来传去;这样就可以通过cookie这个载体完成客户端与服务端的数据交换

二、cookie的创建

Cookie cookie = new Cookie(String key,Sring value);

Cookie cookie = new Cookie("name","zhangsan");

//传递cookie

response.setCookie(cookie );

第一次请求的时候,request Headers并没有zhangsan 

 response的时候给张三带过去,再次请求的时候就会有zhansan了

 

访问同一个项目的其他文件也会有这个cookie

此时要是在其他jsp文件中再写入一个cookie

 Cookie cookie = new Cookie("name","Tom");

//传递cookie

response.setCookie(cookie );

然后访问这个name为tom的jsp文件,首先浏览器第一次还是保存第一次的cookie,但是第二次name就会覆盖为tom 

三、读取cookie 

Cookie[] cookie = request.getCookies();

for(Cookie cookie:cookies){

        //out.write(ookie.toString());

        out.write(cookie.getName()+":"+cookie.getValue()+"<br>");

}

四、Cookie的常用方法:

 void setMaxSge(int age)

//设置cookie的有效时间,单位为秒,默认为-1

 int getMaxSge(

//获取cookie的有效时间

System.out.println(cookie[0].getMaxSge())

String getName()

//获取cookie的name

String getValue()

//获取cookie的value

五、session与cookie的区别

1.cookie

cookie在客户端存储;

保存的数据是String,因为cookie是类似与的文本文件;

可以长期保存在浏览器中,与会话无关;

保存的是不重要信息

2.session

session在服务端存储;

保存的数据是Object类型;

session会随着会话结束而销毁;

保存的是重要信息

3.cookie的生命周期

void setMaxSge(int age)

//设置cookie的有效时间,单位为秒,默认为-1

-1:关闭浏览器就会删除cookie

4.实验

使用session实现,用户登录,如果用户名密码正确,则跳转到首页(转发),并且展示用户名,错误则重新回到登录页面(重定向)

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>hello</h1>
<form action="/cookie_test" method="post">
    用户名:<input type="text" name="username">
    <br>
    密码:<input type="password" name="password">
    <input type="submit" value="登录">
</form>
</body>
</html>

cookie_test.java

package test;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@WebServlet(name = "cookie_test",urlPatterns = "/cookie_test")
public class cookie_test extends HttpServlet {
    private String name = "admin";
    private String password = "123";
    public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
        doPost(request,response);
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        if(username.equals(this.name)&&password.equals(this.password)){
            //添加cookie
            Cookie cookie = new Cookie("username",username);
            cookie.setMaxAge(60*60*24*30);
            response.addCookie(cookie);
            response.sendRedirect("cookie_welcome.jsp");
        }else{
            response.sendRedirect("index.jsp");
        }
    }
}

cookie_welcom.jsp

<%--
  Created by IntelliJ IDEA.
  User: fate
  Date: 2024/4/24
  Time: 22:30
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
<%
    Cookie[] cookies = request.getCookies();
    for(Cookie cookie:cookies){
        if(cookie.getName().equals("username")){
            out.write("<h1>欢迎回来</h1><br>"+cookie.getValue());
        }
    }
%>
<br>
<a href="/layout">退出登录</a>
</body>
</html>

layout.java

package test;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//@WebServlet("/layout")
public class layout extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().write("即将返回登录页面!");
        Cookie[] cookies = req.getCookies();
        for(Cookie cookie:cookies){
            if(cookie.getName().equals("username")){
                cookie.setMaxAge(0);
                resp.addCookie(cookie);
                resp.sendRedirect("index.jsp");
            }
        }
    }
}

web.xml

<!--    添加地址映射,使得客户端可以访问到后端的java文件-->
        <servlet>
            <servlet-name>cookie_test</servlet-name>
            <servlet-class>test.cookie_test</servlet-class>
        </servlet>

        <servlet>
            <servlet-name>layout</servlet-name>
            <servlet-class>test.layout</servlet-class>
        </servlet>

        <servlet-mapping>
            <servlet-name>cookie_test</servlet-name>
            <url-pattern>/cookie_test</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>layout</servlet-name>
            <url-pattern>/layout</url-pattern>
        </servlet-mapping>

总结

session

setAttiibute("name","admin") 存

setAttiibute("name") 取

session.invalidate() 删除登录信息,退出登录

声明周期:服务端,只要web应用重启就销毁;客户端,只要浏览器关闭就销毁

cookie

存操作

Cookie cookie = new Cookie("username",username);
cookie.setMaxAge(60*60*24*30);
response.addCookie(cookie);

取操作

Cookie[] cookies = request.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
out.write("<h1>欢迎回来</h1><br>"+cookie.getValue());
        }
}

退出登录,删除登录信息:cookie.setMaxAge(0);

Cookie[] cookies = req.getCookies();
for(Cookie cookie:cookies){
if(cookie.getName().equals("username")){
cookie.setMaxAge(0);
resp.addCookie(cookie);
resp.sendRedirect("index.jsp");
        }
}

生命周期:不随服务端的重启而销毁,客户端默认关闭浏览器就销毁,但是可以通过setMaxSge(),就不会关闭浏览器就销毁,而由设置的时间来觉得

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值