【问题标题】:Do something when a session ends会话结束时做某事
【发布时间】:2017-01-11 02:32:42
【问题描述】:

基本上我只需要在会话以 javascript 结束时做一些事情。

我已经试过了

window.onbeforeunload = function () 

但是有没有办法用 cookie 或其他东西来做到这一点。 我必须这样做是 javascript,因为它要用于其他网站,而不仅仅是我的,所以我不能在服务器端做任何事情。

【问题讨论】:

  • 会话在服务器端结束;关闭窗口不会自动结束会话。
  • “会话结束时”是什么意思? onbeforeunload 出了什么问题?
  • 定期重新加载站点/ping服务器?
  • 使用会话 cookie,例如当窗口关闭并删除所有会话 cookie 时
  • @KyleBC 如果加载了其他窗口或选项卡怎么办?

标签: javascript cookies session-cookies


【解决方案1】:

如果您网站的所有浏览器选项卡都关闭,我想您希望?

var state=false;
setInterval(function(){
 state=false;
 window.postMessage("ami","*");
 setTimeout(function(){
 try{
 if(state==false){
 window.lonely();
 }
 }catch(e){}
},2000);
},5000);
window.addEventListener("message",function(e){
  if(e.data=="ami"){
  window.postMessage("no!","*");
  }else if(e.data=="no!"){
    state=true
  }});

这样使用:

window.lonely=function(){
  alert("im alone :(");
 };

【讨论】:

  • 您要从用户下方重新加载窗口?如果窗口消失了,setTimeout 将永远不会出现。
  • @Dave:不会发生任何其他事情(除了服务工作者的复杂构造......)
【解决方案2】:

根据您的评论“例如在关闭窗口并删除所有会话 cookie 时使用会话 cookie”,您是否考虑过使用 window.sessionStorage

来自MDN的页面:

sessionStorage 属性允许您访问当前源的会话存储对象。 sessionStorage 与 Window.localStorage 类似,唯一的区别是 localStorage 中存储的数据没有设置过期时间,sessionStorage 中存储的数据会在页面会话结束时被清除。只要浏览器打开并在页面重新加载和恢复后仍然存在,页面会话就会持续。在新选项卡或窗口中打开页面将导致启动新会话,这与会话 cookie 的工作方式不同。

(我的重点补充)

从听起来你想要做的事情来看,这可能正是你所需要的。

注意:请勿将其用于存储任何身份验证或其他敏感数据。

【讨论】:

  • 不,我没有考虑过它,我将如何使用它,所以在会话结束时我可以将数据发送到 api
  • 啊,好吧,是的,那行不通。根据您的评论,我误解了您正在尝试做什么。据我所知,当sessonStorage 被清除时,无法触发操作。
猜你喜欢
  • 1970-01-01
  • 2014-05-26
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2013-02-19
相关资源
最近更新 更多