前言
前端的面试经常会问到的问题:
你了解登录嘛?
怎么实现登录状态保持?
单点登录是什么?
了解什么第三方登录手段?
登录究竟是怎么实现的?
众所周知,客户端和服务端的通信在浏览器上基本上都是通过HTTP协议实现,而HTTP的无状态性,就导致,刚刚请求得到的东西如果浏览器(客户端)不做一些缓存处理,下次请求任然还是会像首次见面一样。
怎么保存请求状态呢?(登录状态)
肯定是要使用缓存的,并且这个缓存在每次请求request中可以携带上,传递给服务器。
cookie!!!
- cookie实现简单登录? —node.js为例
1.开启http服务
const http = require('http')
const PORT = 8000
const serverHandle = require('../app')
const server = http.createServer(serverHandle)
server.listen(PORT)
2.serverHandle中获取cookie
const serverHandle = (req, res) => {
//...设置返回格式,获取path,解析query
//解析cookie
req.cookie = {};
const cookieStr = req.headers.cookie || '';
cookieStr.split(';').forEach(item => {
if(!item) {
return;
}
const [key, val] = item.split('=');
//前端拼接cookie,会有间隔空格
req.cookie[key.trim()] = val.trim();
})
}
3.服务端响应设置cookie
//服务端设置cookie,可以设置过期时间,作用域等属性
res.setHeader('Set-Cookie', `userid=${userId}; path=/; httpOnly; expires=${getCookieExpires()}`)
- 引入session的概念
解决用户信息只通过cookie传输,暴露username很危险
- 在cookie中存储userId,服务端存储对应的username
- 服务端存储这个信息的载体,统称为session