0%

登录问题

前言

前端的面试经常会问到的问题:

  • 你了解登录嘛?

  • 怎么实现登录状态保持?

  • 单点登录是什么?

  • 了解什么第三方登录手段?

登录究竟是怎么实现的?

众所周知,客户端和服务端的通信在浏览器上基本上都是通过HTTP协议实现,而HTTP的无状态性,就导致,刚刚请求得到的东西如果浏览器(客户端)不做一些缓存处理,下次请求任然还是会像首次见面一样。

怎么保存请求状态呢?(登录状态)

肯定是要使用缓存的,并且这个缓存在每次请求request中可以携带上,传递给服务器。

cookie!!!

  1. 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()}`)
  1. 引入session的概念

解决用户信息只通过cookie传输,暴露username很危险

  • 在cookie中存储userId,服务端存储对应的username
  • 服务端存储这个信息的载体,统称为session