赞
踩
1.1 首先二者的读法不同
认证: Authentication
授权: Authorization
1.2 认证和鉴权是什么?
从简单的角度来说:
认证: 理解为你是谁
授权: 理解为你有哪些权限能干什么
从正经的角度来说:
认证:是验证您的身份的凭据(例如用户名/用户ID和密码,通过这个凭据,系统知道你就是你自己,也就说 系统存在你这个用户,所以,认证被称为身份/用户验证。
授权:实在认证之后的操作,掌管访问系统的权限,比如vip的权限可以访问vip的资源,对资源操作删除啊,添加啊的权限。
使用它们是为了保护我们系统的安全性。
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie 通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
Web应用程序是基于HTTP协议进行数据传输,HTTP 协议是一种无状态协议
,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录。一旦客户端和服务端的数据交互完后,就会断开连接,再次进行数据 交互的需要再次建立新的连接。而Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。
例如: 即用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的 会 话了。要跟踪该会话,必须引入一种机制。
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的依据是域名。
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)修改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。