认证(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)修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

油锅里的猪

您的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值