Cookie理论基础

服务器发送session对象对应的sessionID标记给浏览器,这实际上是一个Cookie对象

cookie对象:JSESSIONID=0C0495B989EBFC63C677C73390B29697; 服务器就是这个地址来查找session对象

cookie最终是保存在浏览器客户端上

可以保持在浏览器运行内存上(浏览器关闭,cookie也就消失了)

也可以保存在硬盘文件中。(永久保存)

cookie有什么用

cookie和session机制其实都是为了保存会话的状态

cookie是将会话的状态保存在浏览器客户端上(cookie数据存储在浏览器客户端上)

session是将会话的状态保存在服务器端上(session对象是存储在服务器上)

为啥要有cookie和session机制(因为HTTP协议是无状态,无连接协议)

例子:126邮箱有一个10天免登录选项

在用户登录账号密码后,并选择10天内免登录,这样会在浏览器端保存一个cookie,这个cookie实际上并不是保存在运行内存中的,而是保存在硬盘内存中,并且设置10天有效,每当登录时,浏览器会自动在硬盘内存中找到cookie,并向服务端获取到账号密码,而在10天后,cookie信息会被销毁,浏览器也无法向服务端发送cookie(也无法通过sessionid获取session对象了),就需要重写登录,但值得注意的是,服务器端的session对象也会在session超时机制后被销毁,所以duck放心数据泄露问题。

cookie和session机制实际上是HTTP协议的一部分(在web开发里,他俩基本是必需的)

HTTP协议中规定:任何一个cookie都是由name和value组成的,这俩都是字符串类型

HTTP协议是这样规定的(cookie和路径是关联在一起的): 浏览器是自动携带path下的cookie发送给服务器端(URL)

关于cookie的有效时间

pxm.setMaxAge(60*60);(设置cookie在一小时之后失效,存储到硬盘内存当中)(java代码)
没有设置有效时间的话,cookie是存储到运行内存当中
设置有效时间(>0)后,cookie会被保存到硬盘内存当中
pxm.setMaxAge(0);(作用:删除浏览器上的同名cookie)(java代码)
pxm.setMaxAge(-55);(作用:将cookie存储到浏览器的运行内存中,等价于默认不写)(java代码)

关于cookie的path,cookie关联的路径问题:

在服务器端发送的路径(xxxxx)localhost:8080/servlet13/cookie在此路径生成的cookie会与此相关联,在此根路径以及根路径的子路径下提交请求时,这个cooie会被浏览器自动提交到服务器端。

手动设置cookie路径setPath();那么关联路径被修改。

浏览器发送cookie给服务器了,服务器的java程序怎么接受?(注意:必需保证在同一相关路径下)

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
@WebServlet("/cookie/getcookie")
public class RecieveServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //返回是一个数组,因为浏览器可能会发送多个cookie 但也可能返回null
        Cookie[] cookies = request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name = cookie.getName();
                String value = cookie.getValue();
                if("pxm".equals(name)){
                    cookie.setMaxAge(60*60);
                    System.out.println("设置成功");
                }
            }
        }
    }
}

当前文档25条主题 共737字

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值