1.cookie
1.1什么是cookie
Cookie 是一种在客户端(通常是 Web 浏览器)和服务器之间传递信息的机制,用于在客户端存储少量的数据。它由服务器发送到客户端浏览器,然后浏览器会将这些数据存储在本地,并在后续的请求中将这些数据发送回服务器。
-
用途:
- 跟踪用户会话:网站可以使用 Cookie 来跟踪用户的会话状态,例如记录用户登录状态、购物车内容等。
- 个性化设置:网站可以根据 Cookie 中的信息为用户提供个性化的体验,如语言偏好、主题选择等。
-
工作原理:
- 服务器通过 HTTP 响应头将 Cookie 发送给客户端,客户端浏览器接收到 Cookie 后会将其存储在本地。
- 在后续的请求中,客户端浏览器会将之前存储的 Cookie 数据通过 HTTP 请求头发送回服务器。
- 服务器可以根据接收到的 Cookie 数据来识别用户、获取用户状态等信息。
-
特点:
- Cookie 存储在客户端,对于服务器端来说是不可见的,因此可以用来存储一些客户端相关的信息。
- 每个 Cookie 都有一个名称、值、域(作用域)、路径、过期时间等属性,这些属性决定了 Cookie 的使用范围和有效期限。
-
安全性:
- Cookie 中的信息在客户端和服务器之间进行传输时是明文的,因此一些敏感信息不应该直接存储在 Cookie 中。
- 为了加强安全性,可以使用加密技术对 Cookie 中的信息进行加密处理,或者采用安全标记(secure flag)和 HttpOnly 标记来增强安全性。
Cookie 是一种在客户端和服务器之间传递信息的简单而有效的机制,它在 Web 开发中被广泛应用于用户状态跟踪、个性化设置等方面。
1.2cookie原理图
Cookie[] cookies = req.getCookies(); //获得Cookie
cookie.getName(); //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60); //设置cookie的有效期
resp.addCookie(cookie); //响应给客户端一个cookie
2.什么是session(重点)
Session(会话)是在 Web 开发中用来跟踪用户状态和信息的一种机制。Session 是在服务器端维护的,用于存储特定用户会话期间的数据,通常以键值对的形式存储。每个用户访问网站时都会生成一个唯一的会话标识符(Session ID),用来标识该用户的会话数据。
以下是关于 Session 的一些重要信息:
-
工作原理:
- 当用户第一次访问网站时,服务器会为该用户创建一个唯一的 Session ID,并将这个 Session ID 存储在客户端(通常通过 Cookie)。
- 在后续的请求中,客户端会将 Session ID 发送回服务器,服务器根据 Session ID 来识别用户,并检索相应的会话数据。
- 会话数据存储在服务器端的内存、数据库或其他持久化存储中,与 Cookie 不同,Session 数据不会暴露在客户端。
-
用途:
- 跟踪用户状态:Session 可以用来跟踪用户在网站上的状态,例如用户登录状态、购物车内容等。
- 存储用户信息:可以将用户的个性化设置、权限信息等存储在 Session 中,以便于在用户会话期间使用。
-
特点:
- 安全性:相对于 Cookie,Session 更安全,因为会话数据存储在服务器端,客户端无法直接修改。
- 生命周期:Session 的生命周期通常由服务器控制,可以设置会话超时时间,当用户一段时间内没有活动时,会话数据会被清除。
-
注意事项:
- Session 数据占用服务器资源,如果会话数据过多或者会话量过大,会增加服务器的负担,需要进行合理管理和优化。
- 可以通过配置 Session 的存储方式、超时时间等参数来调整 Session 的行为,以满足实际需求。
Session 是一种在服务器端维护的用户会话机制,用于存储用户状态和信息,提供了一种安全可靠的方式来跟踪用户在网站上的操作和状态。
2.1session原理图
2.3具体使用
package com.kuang.servlet;
import com.kuang.pojo.Person;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
public class SessionDemo01 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;charset=utf-8");
//得到Session
HttpSession session = req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("秦疆",1));
//获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建
if (session.isNew()){
resp.getWriter().write("session创建成功,ID:"+sessionId);
}else {
resp.getWriter().write("session以及在服务器中存在了,ID:"+sessionId);
}
//Session创建的时候做了什么事情;
// Cookie cookie = new Cookie("JSESSIONID",sessionId);
// resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
//得到Session
HttpSession session = req.getSession();
Person person = (Person) session.getAttribute("name");
System.out.println(person.toString());
HttpSession session = req.getSession();
session.removeAttribute("name");
//手动注销Session
session.invalidate();