面试被问到相关-没答好,挂了
问:浏览器是怎么保持登录状态的,就是你登录一次后过段时间不用再登录
答:登录的时候,用户输入用户名密码,会走到公司的统一验证中心 portal,验证成功,会返回一个 token,
用户每次请求或者刷新网页的时候会携带这个 token,然后走到 portal 验证中心,只要 token 没过期,用户就不用重
新登录。
大佬们能帮我看看我哪里答错了,或者怎么答比较好,多谢!
1
yuzo555 2020-05-05 21:15:24 +08:00
他是问浏览器,不是问你服务端实现机制。
浏览器就是对 Cookie 的处理呗 |
3
superrichman 2020-05-05 21:34:14 +08:00 via iPhone
token 存在 cookie 里,随请求一起传输
|
4
vzyw 2020-05-05 22:03:19 +08:00
session 是后端的概念,session 本质目的就是后端需要区分出每次请求是哪个用户产生的。用 token 的情况下,就是找到这个 token 对应的用户,用 cookie 就是找到这个 cookie 对应的用户,token 、cookie 本质都是一串字符串,一般做法是后端在 redis 里存每个 token\session 对应的 user_id
前后端分离的情况下,token 一般是前端存在 localstorage 中 ,在进行 xhr 请求时放在 herder 的一个字段里面,一般是 authorization 字段 非分离的情况下一般用 cookie,这时也基本上没有 xhr 类型的请求,也没有跨域请求,所以 cookie 会随着 get 或者 post 一同提交到后端 跨域请求 /xhr 类型请求也可以设置 cookie 并且可以自动带上 cookie,具体内容要查一下文档,忘记了 |
5
also24 2020-05-05 22:04:53 +08:00
|
6
darknoll 2020-05-05 22:15:23 +08:00 via Android
应该是回答 cookie 或者 localstorage 这些
|
7
also24 2020-05-05 22:22:03 +08:00
不管是纯粹的 token 机制,亦或者各类 Session 机制,其本身的目的都是为了对用户进行识别或鉴权。
那么核心关注点就三个部分: - 用什么东西、什么方式来进行识别鉴权 - 用来识别鉴权的这个东西,存储在客户端什么位置 - 客户端如何将这个东西发送给服务端 以下,是各种不同机制中,用来识别鉴权所用的 [凭据] : Token (也包括 JWT 等特定协议) Session-ID ( Server Side Session ) Session-Data ( Client Side Session ) 等 以下,是可以用来存储上述凭据的介质: Cookie localStorage / sessionStorage URL / HTML 等 以下,是用来发送上述凭据的机制: Cookie 自动携带(这是 Cookie 特殊的一点,既是存储容器,也是发送机制) 自己在 Ajax 请求中加 Header 或加其它字段 直接加在 Request URL 或 Form 上 等 |
8
johnsona 2020-05-05 22:24:11 +08:00
1.cookie 呢,就是返回头有个 set-cookie,让浏览器保存 cookie,cookie 是保存在浏览器
2.session 呢是浏览器和服务端都保存,服务端给一个 sessionid 存 cookie,下次请求带上这个 cookie,服务端拿着 sessionid 去数据库或者缓存区查,这种 session 方案是依赖于 cookie 3.token 就是存在浏览器的 localstorage,下次请求带上这个 token,服务端再去存储中找 token 确定用户 4.还有一种 token,叫 jwt,和 cookie 很像,也是存浏览器,比如 localstorage,但是存浏览器的话,服务端就没办法把他 revoke 掉,也就取消,没办法退出登录 此外还有 sessionstorage,VUE 还有个 vuex 状态存储 然依赖 cookie 的 session 方案不好解决跨域的问题,比如你的 cookie 是设置在这个域下面的,那请求另外一个域,不会带上这个 cookie,或者你要用 js 去操作这个域(开始胡说八道),那你的 cookie 就不能是 http only 然后 sessionstorage 我还不会,你去百度一下,然后告诉我,阿里嘎多 |
9
xuanbg 2020-05-05 22:24:53 +08:00
4 楼正解,比较合理的做法是存 localstorage,毕竟 cookie 是每次请求都会带着走的,一来浪费流量,二来会暴露在网络上,没有存本地安全。
|
10
also24 2020-05-05 22:31:56 +08:00
另外需要注意的是,非常非常多的关于 Session 的文章都会出现以下误解:
1 、将 Server Side Session 当成了 Session 机制的全部,误以为 Session Data 一定存储在服务端。 2 、将 Cookie 当成了 Session-ID 的唯一存储位置,误以为 Session 机制和 Cookie 是绑定关系。 3 、将 JWT 当成了 Client Side Session 的唯一实现,误以为 JWT 和 Session 机制互为对手关系。 // 当然,很多面试官自己其实也存在这样的误解。只是为了面试的话,倒也是没太大所谓。 // and 其实这楼里已经好几个朋友出现相应的误解了。 |