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();