一、为什么要使用会话控制
因为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进制字符串)。这里知识点很多,以后花时间专门的讲解。