问题描述:
假设我已经完成了一个登录界面Login.html,还有一个登录成功之后的展示界面Display.html。现在我想把在Login.html上得到的用户名传递到Display.html页面上,从而对Display.html进行数据渲染。那么该如何实现用户状态信息在页面之间的传递呢?
解决方案:
方法一
给URL附加对应的查询字符,通过地址栏传递不敏感的数据。例如,我想传递username = “小刘”,就可以在跳转目标的URL后面加上?username = “小刘”即可,如原先的跳转链接是“Diplay.html",加上查询字符后,就变成了"Diplay.html?username = “小刘"。代码如下
/*发送的值要经过编码处理,否则会乱码 */
src=Display.html?username="+encodeURIComponent( "小刘");
然后目标页面通过如下代码就可提取出username
var b=window.location.search.split("?"); //window.location.search返回的是当前页面的URL
var a=b[1].split("=");
var username=decodeURIComponent(a[1]);//提取下来的查询字符要经过decodeURIComponent()解码,否则会出现乱码现象
方法二
利用会话跟踪技术。登录成功后,后端接口为该请求绑定一个独一无二的session对象并返回一个Cookie字段给客户端,该Cookie字段在响应头部里,保存着这个session对象的唯一标识,客户端会把接受到的Cookie字段保存在内存里或者硬盘里,而session对象则保存在服务器里。当用户再次发送请求时,会把Cookie字段一并发送,服务器就可以根据Cookie字段里存储的sessionID名,找出对应的session对象。如果session里绑定了用户的状态信息,就可以通过session对象来记录用户的状态信息了。不同用户对应着不同的session对象。
session对象的特征
-
它是由服务端保存的,且存在一定时间后会自动消失,可以通过session.setMaxInactiveInterval(-1)设置为永远都不失效。而Cookie是保存在客户端的内存或者硬盘里的
-
session对象不会因为用户在不同静态页面之间发生了跳转,或者是刷新了当前页面而发生改变。因为客户端是以Cookie的形式保存了对应session的ID名,这个Cookie是存储在用户电脑内存或者硬盘里的。只要用户不换浏览器(比如当前是用edge浏览器访问的,而接下来使用chrome浏览器访问)或者不换电脑,每次请求后端接口时,还是会以Cookie的形式提交sessionID名的。
-
用户就算同时开启多个相同类型的浏览器进行访问,它们对应的session对象也都是相同的
-
如果session对象没有被设置成永不失效,且你在一定的时间内没有发起第二次请求,则session会自动消失
-
服务器重启后,session也会消失