老板的苦恼假如你在繁华的街角开了一家店,每天客人络绎不绝 。
不过你作为老板却有一些苦恼,你想知道自己的顾客上一次是什么时候来的?
在店里的时候买了什么商品,方便购物的时候进一步提升用户体验 。
可是这些客人赤果果的来,无牵挂的走,店里一直没有留下客人的信息,聪明的你会怎么解决这个问题呢?
文章插图
输入图片说明
互联网没有记忆我们常说互联网没有记忆 。互联网背后的 HTTP 协议也是如此,正因为它无状态,所以足够简单,便于拓展,得以发展到今天这种局面 。
同时也正是因为 HTTP 协议无状态,所以对用户访问等缺乏识别记忆功能 。
那怎么解决这个问题呢?
目前有两张最主流的方式:cookie 和 session 。
cookieCookie 是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现 Session 的一种方式 。
这个就好比我们把客户上次到店里的时间放在用户的口袋里,下次他们来的时候,我们拿出来看一下,就知道客户上次是什么时候来的了 。
当然这些信息用户自己是可以修改的,比如各种浏览器的 cookies 可以被清空 。
这让我想起来以前读的一个故事:
刚在路边摊准备买点小吃 。我说:老板我经常来买,给我便宜点吧 。老板说:我今天第一天摆摊 。铁锅炖自己
信息都放在用户的口袋里虽然方便,但是服务端也要记一些必要的信息,不然被忽悠了都不知道 。
sessionSession 是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;
这个就类似于店里来客人了,服务员留心看一下,知道用户购物车里放了什么商品,是否需要帮助等等 。
Cookie 操作为了让大家直观的感受到 cookie 的使用,我们来看一下 CRUD 的例子 。
为了简单,此处使用 servlet 进行演示 。
文章插图
Cookie
说明【web 会话机制之 session cookie 详解】Cookie是浏览器保存信息的一种方式,可以理解为一个文件,保存到客户端了啊,服务器可以通过响应浏览器的set-cookie的标头,得到Cookie的信息 。
你可以给这个文件设置一个期限,这个期限呢,不会因为浏览器的关闭而消失 。
添加我们可以新建一个 cookie 返回给 resp 。
package com.github.houbb.simple.servlet;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;import java.io.PrintWriter;/** * @author binbin.hou * @since 0.0.2 */@WebServlet("/cookie/add")public class CookieAddServlet extends HttpServlet { private static final long serialVersionUID = 491287664925808862L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { //1. 创建 cookie 信息 Cookie cookie = new Cookie("age", "10"); //30min cookie.setMaxAge(30 * 60); //2. 返回给客户端,用于客户端保存 resp.addCookie(cookie); //3. 页面输出 resp.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=utf-8"); PrintWriter out = resp.getWriter(); // 后端会根据页面是否禁用 cookie,选择是否将 sessionId 放在 url 后面 String url = resp.encodeURL("/cookie/get"); out.println("<a href=https://www.isolves.com/it/cxkf/bk/2021-01-07/'"+url+"'>获取 cookie"); }}
获取获取 cookie 也比较简单,直接通过 req.getCookies() 就可以获取到整个 cookie 列表 。
推荐阅读
- 2020年Web Apps用户界面发展趋势:组件统治一切
- Json Web Token 2020 攻击指南
- 论淘宝搜索推荐算法排序机制及2021年搜索变化的方向
- 用webpack创建vue项目/脚手架
- 华为防火墙配置:登录Web配置界面
- 小程序websocket开发指南
- 免越狱免签名苹果ioswebAPP打包配置实用工具
- 如何阻止对Web应用程序发起的DoS攻击?
- 一文秒懂Web框架基础之WSGI协议
- Web端非常有用的一个文件上传插件——FilePond