当前位置:   article > 正文

认证(Authentication),授权(Authorization) 以及Cookie、Session_authorization和cookie

authorization和cookie

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类的代码:

  1. @GetMapping("/username")
  2. public String setCookie(HttpServletResponse response) {
  3. Cookie cookie = new Cookie("username", "Jovan");
  4. cookie.setMaxAge(7 * 24 * 60 * 60);
  5. response.addCookie(cookie);
  6. return "success";
  7. }

 

  1. @GetMapping("/cookiesAll")
  2. public String readAllCookies(HttpServletRequest request) {
  3. Cookie[] cookies = request.getCookies();
  4. if (cookies != null) {
  5. return Arrays.stream(cookies)
  6. .map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));
  7. }
  8. return "No cookies";
  9. }

            Cookie的不可跨域性         

             例如,京东会向客户端发放京东Cookie,淘宝也会向客户端发放淘宝Cookie。那浏览器访问京东会不会也携带上淘宝发放的Cookie呢?

           不会。Cookie具有不可跨域性,访问京东就只能带京东的cookie。

            Cookie在客户端是由浏览器来管理的。浏览器能够保证京东只会操作京东的Cookie,而不会操作淘宝的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。

         2.2 Session

                 Session是什么:

                      Session是另一种记录客户状态的机制,Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。

                      Session是服务器端使用的一种记录客户端状态的机制

                 Session的定义:

                         Session相当于程序在服务器上建立的一份客户端信息档案,客户端请求的时候只需要查询客户端档案就可以了。

                  Session的用处:

                            Session保存在服务器上记录客户端状态。

                        

  1. //使用request对象的getSession()获取session,如果session不存在则创建一个
  2. HttpSession session = request.getSession();
  3. //获取session的Id
  4. String sessionId = session.getId();
  5. //判断session是不是新创建的
  6. if (session.isNew()) {
  7. response.getWriter().print("session创建成功,session的id是:"+sessionId);
  8. }else {
  9. response.getWriter().print("服务器已经存在session,session的id是:"+sessionId);
  10. }

               Session的有效期

                    由于会有越来越多的用户访问服务器,因此Session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

                           Session的超时时间为maxInactiveInterval属性,

                           可以通过对应的getMaxInactiveInterval()获取,

                           通过setMaxInactiveInterval(longinterval)修改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/178714
推荐阅读
相关标签
  

闽ICP备14008679号