角度:区分不同标签中的会话

时间:2019-09-14 07:55:52

标签: django angular django-rest-framework polling sessionid

我正在开发一个Web应用程序。前端是Angular,后端是带有django rest框架的Rest API。对于某些客户需求,我需要django rest api能够区分具有sessionid的轮询请求。经过一些搜索后,我发现我可以在REST API端使用以下值标识会话:

request.session.session_key

但这不是最佳选择,因为对于两个不同的选项卡,我得到相同的session_key和其余api在请求中接收到的所需sessionId,应标识特定选项卡的会话。因此,不是针对不同PC和主机IP地址的sessionid,还是仅针对浏览器的sessionid,对于两个不同的标签,它应该获得两个不同的sessionid。

django请求对象是否包含其他ID以标识主机标签?

我猜想该解决方案可以在Angular侧找到。

Angular和打字稿中是否有一种方法可以识别标签会话?

1 个答案:

答案 0 :(得分:1)

我不知道您是否可以在某些浏览器js变量中找到相关的tabid值,但是可以使用localStorage和sessionStorage创建它。 使用本地存储,您可以创建变量,其值可通过整个选项卡查看。 sessionStarage用于创建仅在实际选项卡中查看的项目。 我们将使用localStorage存储最后一个受影响的标签ID,并使用sessionStorage存储实际的Tabid值,如下所示:

let lasttabid= localStorage.getItem("lastTabId");
    let tabid= sessionStorage.getItem("tabId"); 
    let lasttabidint: number;
    console.log("lasttabid: "+lasttabid+" tabid: "+tabid);
    if(tabid === undefined || tabid == null || tabid.length<=0 || !tabid){
        if(lasttabid === undefined || lasttabid == null || lasttabid.length<=0 || !lasttabid){
            sessionStorage.setItem("tabId", "1");
            localStorage.setItem("lastTabId", "1");
            tabid= "1";
        } else {
            lasttabidint= +lasttabid;
            sessionStorage.setItem("tabId", String(++lasttabidint));
            localStorage.setItem("lastTabId", String(lasttabidint));
            tabid= String(lasttabidint);
        }
    }

console.log("actual tab id is : "+ tabid);

您想要的结果是tabid值。