「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战
cookie和session有什么区别?如何使用session进行身份认证?在面试过程如何回答这道题,这道面试并不是很难,如果我们想要拿到初级开发 Offer,这道面试题必须要能说出来。
我们来讲解 Session 的主要作用是通过服务端记录用户的状态。Cookie主要是保存在客户端,一般是在浏览器。Session 一般是保存在服务端,相对来说 Session 更安全一些。
如果使用 Cookie 的话,一些敏感信息就不要写在 Cookie 里面,因为使用Cookie,别人只要能看你的浏览器,它就能看到你 Cookie 里面的内容,最好是将 Cookie 里面的信息加密后,然后再到服务端去解密。
Session 和 Cookie 怎么配合着进行对用户的认证呢?
很多时候我们都是通过 SessionID 来指定特定的用户,SessionID 一般会选择存放在服务端。举个例子:用户成功登陆系统,然后返回给客户端具有SessionID的Cookie,当用户向后端发起请求的时候会把SessionID带上,这样后端就知道你的身份状态了。关于这种认证方式更详细的过程如下:
一般有如下几个步骤:
浏览器先通过 post 请求,一般是 post 请求发送用户名和密码发到服务端,然后服务端根据用户发来的用户名和密码然后和数据库里的进行对比,如果对比一致,则验证通过。
验证通过的时候会把 session 存在服务端,然后给给浏览器端发一个sessionId,这个 sessionId一般是存在cookie中的。
当浏览器跟服务端进行下一步交互的时候,它就会把 cookie 里面的 sessionId 给它传过来,服务端呢会根据sessionId 去它存储找到和 sessionId 关联的所存储的那个 Session,然后从 Session里面取出用户的一些信息,再进行操作,给用户一个响应。
这个就是用户通过 cookie 和 session 进行认证的一个整体的流程。
我们来总结一下:
- 用户向服务端发送用户名和密码。
- 服务端进行验证之后为用户生成一个 Session,并将 Session 信息存储起来。
- 服务端向用户返回一个 sessionId,并写入用户的cookie。
- 用户通过 Cookie 来保持和服务端的一个登录状态。
- 浏览器后续向服务端发送请求的时候,通过将 Cookie的 sessionId 带上发送到服务端,然后服务端拿到 sessionId 之后,和在服务端存储的 session进行对比。如果验证通过的话,就会从 session 里面取出用户的信息,进行后面的业务逻辑处理。