Token与Cookie+Session区别

Token与Cookie+Session区别 在了解Token与Cookie+Session技术的直接区别之前,需要了解HTTP协议,以下是MDN的介绍: HTTP 是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互,比如在一个电商网站里,用户把某个商品加入到购物车,切换一个页面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了哪些商品。而使用 HTTP 的标头扩展,HTTP Cookie 就可以解决这个问题。把 Cookie 添加到标头中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。 HTTP 最早期的模型和 HTTP/1.0 的默认模型,是短连接。每一个 HTTP 请求都由它自己独立的连接完成;这意味着发起每一个 HTTP 请求之前都会有一次 TCP 握手,而且是连续不断的。 在传统Cookie+Session中,当向服务器请求验证后,当登录成功服务端会生成Session,并将SessionId通过Set-Cookie发送给客户端,然后客户端将Cookie保存后,后续每次进行请求时,会携带Cookie一起发送给服务端,服务端验证Cookie中的SessionId后(即鉴权)再予以相应操作。 在Token请求中,与Cookie+Session类似,在向服务器请求验证后,服务器会对当用户生成一个唯一Id即token,这个token即代表着这个用户,服务端将token传输给客户端,后面客户端请求时带上这个token就行,后续请求时,服务端只需要验证token库中是否存在当前token即可完成验证。 注意MDN这一句话:同一个链接中,两个执行成功地请求之间是没有关系的。正因为HTTP的无状态,请求之间无关,在类似WebSocket的长连接中,通常使用Session来管理服务端与客户端的链接,在HTTP下是不需要的。因为无状态,所以每次请求都会携带token,使用在服务端只需要验证token的状态即可实现鉴权,同时使用Token与Session相比,Session中参数更多,保存需要更多的空间,而Token可以是一个字符串或数字,空间占用远小于session所占用的空间。

April 20, 2023 · 1 min · 23 words · ecturing

并发编程

并发编程 以下是一些常用的并发编程模型和技术: 信号量(Semaphore):用于保护共享资源、协调进程间同步和互斥操作的机制,可以限制对某个共享资源的访问数量。 锁:在多线程或多进程的环境中,如果多个线程或进程同时访问共享数据,可能会导致数据不一致或竞争条件等问题,从而影响程序的正确性和可靠性。为了解决这些问题,可以使用锁来同步多个线程或进程之间对数据的访问,锁一般分为两种,互斥锁和读写锁。 原子操作(Atomic Operation):通过CPU提供的原子指令(例如Compare-and-swap、Fetch-and-add等)来对内存进行原子操作,从而避免并发情况下的数据竞争。 事件驱动(Event-driven):使用消息队列、事件循环等机制,将任务分解为小而独立的事件单元,并通过异步调用来执行这些事件单元,以提高程序的并发性能。 Actor模型:基于对象的并发编程模型,通过创建多个Actor对象,每个对象都有自己的状态和行为,可以相互发送消息来进行通信和协作。 协程(Coroutine):一种轻量级的线程,可以在一个或多个线程中执行,通过协作式调度的方式实现非抢占式的多任务处理,从而提高程序的并发性能。 数据流(Dataflow):使用管道、通道等机制,将数据从一个任务顺序传递到另一个任务,以实现并发数据处理。 锁 自旋锁:即CAS 读写锁:常见IO操作中的读写锁 互斥锁: 信号量: 事件驱动 数据流 数据流模型是go语言中最常见的一个模型,它使用了select加channel的方法实现了数据流模型,每一份数据就像水流一样流动。 原子操作

January 9, 2023 · 1 min · 19 words · ecturing