认证(Authentication),授权(Authorization) 以及Cookie、Session
1.认证和授权
1.1 首先二者的读法不同
认证: Authentication
授权: Authorization
1.2 认证和鉴权是什么?
从简单的角度来说:
认证: 理解为你是谁
授权: 理解为你有哪些权限能干什么
从正经的角度来说:
认证:是验证您的身份的凭据(例如用户名/用户ID和密码,通过这个凭据,系统知道你就是你自己,也就说 系统存在你这个用户,所以,认证被称为身份/用户验证。
授权:实在认证之后的操作,掌管访问系统的权限,比如vip的权限可以访问vip的资源,对资源操作删除啊,添加啊的权限。
使用它们是为了保护我们系统的安全性。
2. Cookie 和 Session
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie 通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
Web应用程序是基于HTTP协议进行数据传输,HTTP 协议是一种无状态协议
,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录。一旦客户端和服务端的数据交互完后,就会断开连接,再次进行数据 交互的需要再次建立新的连接。而Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。
例如: 即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的 会 话了。要跟踪该会话,必须引入一种机制。
2.1 cookie
Cookie是什么:
服务器单从网络连接上无法知道客户端是谁,这样会造成会话跟踪失败的问题。那么就会给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户是谁了。这就是Cookie。
Cookie的定义:
Cookie是某些网站为了辨别用户身份而储存在用户本地终端上的数据。
Cookie的用处:
Cookie存储在客户端,一般用于存储用户信息。
Session怎么保证是同一个会话请求?
服务器第一次接收到请求时,会创建Session对象,同时创建成一个 sessionId 。Java中把Cookie封装成了,javax.servlet.http.Cookie类,服务器通过操作Cookie类对象对客户端Cookie进行操作。向客户端发送要求设置 Cookie 的响应, 客户端收到响应后,在本机客户端保留 Cookie 信息,该 Cookie 的过期时间为浏览器会话结束。
Cookie类的代码:
@GetMapping("/username")
public String setCookie(HttpServletResponse response) {Cookie cookie = new Cookie("username", "Jovan");cookie.setMaxAge(7 * 24 * 60 * 60); response.addCookie(cookie);return "success";
}
@GetMapping("/cookiesAll")
public String readAllCookies(HttpServletRequest request) {Cookie[] cookies = request.getCookies();if (cookies != null) {return Arrays.stream(cookies).map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));}return "No cookies";
}
Cookie的不可跨域性
例如,京东会向客户端发放京东Cookie,淘宝也会向客户端发放淘宝Cookie。那浏览器访问京东会不会也携带上淘宝发放的Cookie呢?
不会。Cookie具有不可跨域性,访问京东就只能带京东的cookie。
Cookie在客户端是由浏览器来管理的。浏览器能够保证京东只会操作京东的Cookie,而不会操作淘宝的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。
2.2 Session
Session是什么:
Session是另一种记录客户状态的机制,Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。
Session是服务器端使用的一种记录客户端状态的机制
Session的定义:
Session相当于程序在服务器上建立的一份客户端信息档案,客户端请求的时候只需要查询客户端档案就可以了。
Session的用处:
Session保存在服务器上记录客户端状态。
//使用request对象的getSession()获取session,如果session不存在则创建一个
HttpSession session = request.getSession();
//获取session的Id
String sessionId = session.getId();
//判断session是不是新创建的
if (session.isNew()) {response.getWriter().print("session创建成功,session的id是:"+sessionId);
}else {response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
}
Session的有效期
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
Session的超时时间为maxInactiveInterval属性,
可以通过对应的getMaxInactiveInterval()获取,
通过setMaxInactiveInterval(longinterval)修改。
认证(Authentication),授权(Authorization) 以及Cookie、Session相关推荐
- Cookie + Session登录-Token登录-SSO 单点登录-OAuth 第三方登录
文章目录 1.Cookie + Session 登录 2. Cookie + Session 存在的问题 3.Token 登录认证 1. Token 机制实现流程 2. Token 机制的特点 3. ...
- shiro安全框架初识--shiro简介、认证与授权
1.shiro安全框架 1.1.什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只 ...
- 一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token
很多人可能对权限认证领域一些常见的概念都不是特别了解,所以写了篇文章专门介绍一下这些概念. 1. 认证 (Authentication) 和授权 (Authorization)的区别是什么? 这是一个 ...
- .net中的认证(authentication)与授权(authorization)
注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧. "认证"与"授权"是几乎所有系统中都会涉及的概念,通俗点讲: 认证(authenticati ...
- 越权、cookie与session、认证和授权
越权修改 疑问开始 例子 黑盒 白盒 修复后的代码 session session id 是从哪里开始就有的 session 保存在哪 session_start等函数所做的实际操作是什么 测试会话固 ...
- 使用cookie和session实现用户的认证和授权(原生方式,不使用安全框架)
在学习springsecurity和shiro等安全框架之前可以使用原生的方式,基于cookie和session实现原生的认证,有利于加强对框架学习的理解,也有助于清晰的理解认证和授权的流程,也有助于 ...
- Flex与.NET互操作(九):FluorineFx.NET的认证(Authentication )与授权(Authorization)
FluorineFx.NET的认证(Authentication )与授权(Authorization)和ASP.NET中的大同小异,核实用户的身份既为认证,授权则是确定一个用户是否有某种执行权限,应 ...
- 谈谈系统认证 (Authentication) 和授权 (Authorization)
这是一个绝大多数人都会混淆的问题. 说简单点就是: 认证 (Authentication): who,你是谁 授权 (Authorization): what,你有权限干什么 稍微正式点的说法就是: ...
- 认证 (Authentication) 和授权 (Authorization)的区别是什么?
说简单点就是: 认证 (Authentication): 你是谁. 授权 (Authorization): 你有哪些权限 干什么事情. 稍微正式点(啰嗦点)的说法就是: Authentication( ...
最新文章
- 博士申请 | 普渡大学郭齐教授组招收计算成像全奖博士生
- 浅谈javaweb三大框架和MVC设计模式
- java源码文件丢恢复需要多少钱,上岸蚂蚁金服!
- [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)
- 关于自定义脚本rc.local里开机不启动的问题--以tomcat和perl相关的脚本为例
- 【信息系统项目管理师】第10章 上篇-项目沟通管理 知识点详细整理
- 刪除主表中不存在記錄的從表資料
- OpenNLP-引言
- Unity安卓开发环境搭建
- oracle存储过程插表,oracle 一张表插入另外一张表 存储过程
- 装系统提示缺少计算机所需的介质驱动程序,win8系统UEFi安装提示“缺少计算机所需的介质驱动程序”的图文步骤...
- JAVA后端调用微信支付“统一下单”接口实现微信二维码扫码支付
- 家庭收支记账软件项目【Golang-面向对象】
- vim配置——MA6174
- IP 地址 与硬件地址
- 【C语言】输出国际象棋棋盘
- 劲霸男装四十年:“真男人”成“老男人”还能如何劲霸?
- iPhone升级系统 死机了怎么办
- 联想笔记本Y430p升级硬件(内存扩容+升级固态)
- 西门子1200PLC和Modbus485从站设备通讯
热门文章
- 誓约-markdown编辑器学习
- C语言构造函数和释构函数,c++基础语法:构造函数与析构函数
- IT只忍者龟Photoshop简单人像的头发抠图过程
- 规则引擎-IBM ODM(ILog)
- wooyun常见ssrf总结+常见ssrf绕过姿势
- Green++“绿多多”绿色资产的2019猪年贺岁词 | 复联复兴者联盟FUND++
- python 通过电话号码获取微信性别信息
- MySQL中的时间类型
- 摄影爱好小白的小福利,安利手机P图软件
- 商品上架难?那是你没用对方法