从产生背景和要解决的问题来了解Session和Cookie
学习一个东西么,首先看 产生的背景和要解决的问题。
就像session和cookie的产生就是为了解决http请求的无状态。
再从服务端和客户端去挖掘。
因为http 是短链接,无状态的,
这样 服务端就无法 获取具体的 请求 方。
为了能够一直和同一个请求方 识别 就产生了 session 和 cookie。
每次请求 会自动创建session,这就是 servlet 容器要做的。这样你就可以 拿到 session 做一些业务逻辑,比如 保存 用户信息等。
cookie 就是存浏览器端 ,很多浏览器 都支持cookie。 因为每次请求结束后 服务器 会写cookie 这样浏览器端会 存一些服务端的 信息, 这样下次请求的 时候 浏览器端会带着 这个cookie, 比如常用的登录 ,如果浏览器这次请求没有cookie 信息,那么 服务端 就会认为这次是没有登录的。
所以 你F12 就可以看到 一些 用户信息。
当然 cookie 也是不安全的,会被窜改。服务端相对安全一些。
最主要的是 我拿到你的 cookie 就可以像客户端 一样向服务器端发送请求了 ,那么 我就可以随便 改你的信息。
不是改cookie,cookie改不了的,是改用户信息。
拿到你的cookie登录我的一些账号,直接跳过了登录。就是抓包或者拦截用的技术能拿到cookie值,与服务端建立连接了。
postman,jmeter,fiddler,web开发者工具可以抓包获取cookie值。
现在 整个 Http 就是这样请求的,这是一个流程。
首先Session通过在服务器端记录信息确定用户身份,Cookie通过在客户端记录信息确定用户身份。
Cookie技术是客户端的解决方案 客户端发送了一次请求 服务端应答了 并 举例子: 登录 首先客户端发送换一次登录请求---> 服务端接收到了这次请求 并且登录成功 --->应答客户端
那么接下来 登录信息以文本文件的方式存放在客户端 -->然后客户端每次向服务器发送请求的时候都会带上这些信息。
说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体Response Body中的,而是存放于HTTP响应头Response Header 。当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置。
客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头 Request Header了。有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。
这就是 Cookie,这个登录流程 就是这样完成的。
Session 还是登录的例子。
Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上, 就是登录的 用户信息会保存在服务器端。因为肯定有不同的用户登录么 那么每次Session 都会保存对象的用户信息 Session 会生成一个SessionId。这个SeesionId 就是为了确认这次用户的 身份。
Session在用户第一次访问服务器的时候自动创建 只有访问老的JSP、或者S ervlet等程序时才会创建Session。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该Session 用户每访问服务器一次,无论是否读写Session,服务器都认为该用户 是一直在登录的状态。
当然 Session也是有有效期的 ,服务器默认是30分钟。
当Session 过期 你就要从新登录了 因为要重新生成 Session 信息。
这就是 Seesion。
不是说session和cookie不能同时使用的技术,而是相辅相成的。如果你浏览器关闭了 Cookie, 那么服务器端可能会 禁止你访问。
他们分别是网络七层协议的哪个层? 他们都是 物理层。
本文来自博客园,作者:思涵么么哒,转载请注明原文链接:https://home.cnblogs.com/u/lu-en