服务器发送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字