浅谈网站常用的cookie、session、token三种会话控制方式

2023-06-15

一、为什么要使用会话控制

因为HTTP是一种无状态协议,所以没有办法区分多次请求是否来自于同一个客户端,引入会话控制可以分辨出来自哪个用户,从而执行相应的程序。常见的会话控制有这么三种:cookie、session、token。

二、使用cookie会话控制

1、认识cookie

cookie是HTTP服务端发送给用户浏览器并保存在本地的一小块数据。cookie的特点是:保存在本地浏览器的数据;是按照域名来划分保存的。

2、cookie的运行流程

以登录为例:

1)用户在登录表单中填写用户名和密码,并提交表单

2)服务端接收到用户提交的表单数据进行处理,如何登录成功,则向浏览器发送一段cookie数据。

3)浏览器保存cookie数据到本地,用户下次访问任何该网站页面都会自动带上该cookie数据。

4)服务端根据浏览器自动带上的cookie数据,绑定用户是否已经登录

PHP中设置cookie的方式:

<?php
setcookie("userName", "zhangsan", time()+8640);

最后一个参数是过期时间,单位是秒,这里设置1天后过期。

三、使用session会话控制

1、认识session

session是保存在服务端的一块儿数据,保存当前访问用户的相关信息。它与cookie的区别主要有两点:cookie是存储在客户端,而session是存储在服务端;cookie是以明文的方式存放在客户端的,不安全,而session因为存放于服务端,所以相对要安全得多。

2、session的运行流程

仍然以登录为例:

1)用户在登录表单中填写用户名和密码,并提交表单(跟cookie相同)

2)服务端接收到用户提交的表单数据进行处理,如何登录成功,则在服务端创建session保存相关信息,然后将session_id返回给浏览器。

3)浏览器将session_id保存到cookie中,用户下次访问任何该网站页面都会自动带上该cookie数据。

4)服务端根据浏览器自动带上的cookie数据的session_id,绑定用户是否已经登录

注意:cookie保存的只是session_id,而不是用户名这些数据。

四、使用token会话控制

1、认识token

token是服务端生成并返回给客户端的一串加密字符串,token中保存着用户信息。主要应用于app,以及跨应用数据通讯。

2、token的运行流程

仍然以登录为例:

1)用户在登录表单中填写用户名和密码,并提交表单(相同)

2)服务端接收到用户提交的表单数据进行处理,如何登录成功,则在服务端按一定算法加密用户信息,生成一串token字符串。token是在响应体中返回给客户端,这点也与cookie、session不同。

3)app会保存该token,后续发送请求时,也需要手动将token添加在请求报文中(cookie和session都是自动携带)。

4)服务端对app传上来token字符串进行解密,根据解密后的数据执行相应的操作。

3、令牌token的生成

为了程序的安全性,token的生成会有一定的讲究, 其主要组成部分是:uid(用户唯一的身份标识)、time(当前时间的时间戳),sign(签名,token的前几位以hash算法压缩成的一定长度的16进制字符串)。这里知识点很多,以后花时间专门的讲解。

版权声明:本文为老张的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://www.webppp.com/view/session_control.html