web登录的session、cookie和token
为什么会有登录这回事
首先这是因为HTTP是无状态的协议,所谓无状态就是在两次请求之间服务器并不会保存任何的数据,相当于你和一个人说一句话之后他就把你忘掉了。所以,登录就是用某种方法让服务器在多次请求之间能够识别出你,而不是每次发请求都得带上用户名密码这样的识别身份的信息。 从登录成功到登出的这个过程,服务器一直维护了一个可以识别出用户信息的数据结构,广义上来说,这个过程就叫做session,也就是保持了一个会话。
常见的两种登录
忽然想到一点,看了网上很多问题,我觉得大家应该区分两个概念:广义的session和狭义的session
服务器session+客户端sessionId
先用图来看:
详细说的说一下,这里面主要是这么几个过程:
- 客户端带着用户名和密码去访问 /login 接口,服务器端收到后校验用户名和密码,校验正确就会在服务器端存储一个sessionId和session的映射关系
- 服务器端返回response,并且将sessionId以set-cookie的方式种在客户端,这样一来,sessionId就存在了客户端。这里要注意的是,将sessionId存在cookie并不是一种强制的方案,而是大家一般都这么做,而且发请求的时候符合domain和path的时候,会自动带上cookie,省去了手动塞的过程。
- 客户端发起非登录请求时,服务端通过cookie中的sessionId找到对应的session来知道此次请求是谁发出的。
token
业界通用的加密方式是jwt(json web token),jwt的具体格式如图:
简单的介绍一下jwt,它主要由3部分组成:
header 头部
{
"alg": "HS256",
"typ": "JWT"
}
payload 负载
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1555341649998
}
signature 签名
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
Authorization: Bearer <token>
这样子确实也可以解决cookie跨域的问题,不过具体放在哪儿还是根据业务场景来定,并没有一定之规。
两种登录方案存在的问题
session方式
- session方式由于会在服务器端维护session信息,单机还好说,如果是多机的话,服务器之间需要同步session信息,服务横向扩展不方便。
- session数量随着登录用户的增多而增多,存储会增加很多。
- session+cookie里面存sessionId的方式可能会有csrf攻击的问题,常见的方式是使用csrf_token来解决
jwt方式
- jwt的过期时间需要结合业务做设置,而且jwt一旦派发出去,后端无法强行使其作废
web登录的session、cookie和token的更多相关文章
- requests保持登录session ,cookie 和 token
一.request提供了一个一个叫做session的类,来实现客户端和服务端的会话保持 # coding:utf-8 import requests url = "https://passp ...
- [Web][学习随笔]Session&cookie
Session 从登录建立连接到退出就是一次会话.Session数据就会在会话期间用户存在服务器端的数据.这样,当用户在Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会 ...
- Java Web学习(五)session、cookie、token
文章更新时间:2020/09/14 一.引言 动态网页兴起后,会话管理变成开发者需要考虑的一个问题,由于HTTP请求是无状态的,为了区分每个用户,此时引入了会话标识(sessionId)的概念,但是存 ...
- Java Web Application使Session永不失效(利用cookie隐藏登录)
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...
- 【转】Session Cookie Token的区别
Cookie cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保 ...
- session 、cookie、token的区别
session session的中文翻译是“会话”,当用户打开某个web应用时,便与web服务器产生一次session.服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后sess ...
- 什么是Http无状态?Session、Cookie、Token三者之间的区别
一.什么是HTTP无状态? 1.1定义: HTTP无状态协议,是指协议对于交互性场景没有记忆能力. 1.2举个例子: 在点击一个纯的html网页,请求获取服务器的html文件资源时,每次http请求都 ...
- 彻底弄懂session,cookie,token
session,cookie和token究竟是什么 简述 我在写之前看了很多篇session,cookie的文章,有的人说先有了cookie,后有了session.也有人说先有session,后有co ...
- session 、cookie、token的区别及联系
本文转自:https://blog.csdn.net/jikeehuang/article/details/51488020:https://blog.csdn.net/weixin_37196194 ...
随机推荐
- 在Eclipse中使用WindowBuilder设计Swing程序
在Eclipse中使用WindowBuilder设计Swing程序 Swing程序表示Java的客户端窗体程序,除了通过手动编写代码的方式设计Swing程序之外,Eclipse中还提供了一种W ...
- Win10设置文件夹权限报错-(提示:无法枚举容器中的对象 访问被拒绝)
一.右击文件 选择“属性”-“安全”-“高级”,如下图 二.查看哪个用户的权限是:“完全控制”,我这里是“SYSTEM”用户. 三.选择顶部的 “更改-“高级”-“立即查找”,然后选择管理员账户“SY ...
- WEditor使用方法
APP的定位方式有: 1. Appium Desktop工具里的Inspector 2. /tools/bin/uiautomatorviewer.bat 最近发现在一个更好用的定位工具: Wedit ...
- 九十二:CMS系统之cms后台登录界面
html <!DOCTYPE html><html lang="zh-CN"> <head> <meta charset="ut ...
- vue引入插件方法
jQuery插件npm install jquery --save-dev 需要用jQuery的文件中引入:import $ from 'jquery' 轮播图插件安装:npm install vue ...
- Asp.Net调用后台变量的三种写法
1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...
- vue $refs获取dom元素
1.今天做vue项目有个获取dom节点,主要目的是获取节点让滚动到顶部 首先在滑动容器去添加ref <div class="contentScroll" ref=" ...
- python录音并调用百度语音识别接口
#!/usr/bin/env python import requests import json import base64 import pyaudio import wave import os ...
- flask的session基础认识
from flask import Flask,session from datetime import timedelta import os app = Flask(__name__) app.c ...
- ABC044 Digit Sum
题目链接 我的思路略复杂,这里介绍一个比较简洁的做法. 对于 $b \le \sqrt{N}$,暴力枚举 $b$.对于 $b > \sqrt{N}$, 注意到在 $b$ 进制下 $N$ 至多有 ...