之前一直对这两个概念模棱两可,最近面试被问到时,答的很差,才认真看了看。
session
存储于服务端。当浏览器打开某个窗口时,服务端就会为这个窗口,分配一个独一无二的sessionId,用来标识session。从打开此窗口到关闭为止,是一次会话,而session就是用来存储会话中的数据、状态等等。因此,session会在会话结束时过期。
由于每个窗口的sessionId都是不一致的,所以每个窗口的session以及其中存储的数据也是不同的。如果想在一个窗口中访问另一个窗口的session数据,就可以通过拿到另个窗口的sessionId来实现。
session的实现方式
cookie实现
将sessionId存储在cookie中,当浏览器支持cookie时,session就可以依赖于这个cookie
encodeURL()
当浏览器不支持cookie时,通过进行URL重写,将sessionId带在url后面。
cookie
存储在客户端。可以用来存储用户本地的信息,或是sessionId。
cookie存储sessionId时,就相当于浏览器窗口针对服务端的一个“身份证”,可以标识身份,标明是由谁发出的动作。
cookie也可以存储一些本地的数据,比如记住密码,下次直接读取cookie中的密码即可。