【问题标题】:How to determine if the browser session just started or if it's a subsequent click?如何确定浏览器会话是刚刚开始还是后续点击?
【发布时间】:2014-08-10 14:26:11
【问题描述】:

我想知道浏览器会话是全新的(用户刚刚启动浏览器并加载了我的页面)还是随后的点击。

如何用 JavaScript 做到这一点?

【问题讨论】:

    标签: javascript session-state


    【解决方案1】:

    您可以使用window.referrer,尽管这不是一种万无一失的方法,因为某些浏览器设置会出于隐私目的将其隐藏。不过,它应该适用于大多数默认设置。

    如果浏览器刚刚启动或用户从新标签页来到那里,它会给你undefined,但请记住,如果用户有一个主页并从那里来到该站点,它会给主页。此外,如果用户 CMD/CTRL + clicks 并在新标签页中打开,它将抛出 undefined,尽管他们点击了一个链接。

    话虽如此,

    if(window.referrer){
      //stuff to do if clickthrough
    }else{
      //stuff to do if new session
    }
    

    Demo

    【讨论】:

    • 似乎 window.referrer 从未在 chrome 中定义过。
    • @Ramin 那是因为你的隐私设置。
    • 我没有设置任何东西——也许在检查器中禁用了缓存?
    • @Ramin 可能是,也可能是 Chrome 的默认设置。
    • AstroCB,你知道这在服务器端是否可行吗?
    【解决方案2】:

    试试document.referrer,而不是window.referrer。我让它在 chrome 中为我工作

    【讨论】:

      【解决方案3】:

      您可以在网站加载到初始页面时设置会话 cookie。因此,当网站加载并检查该 cookie 是否存在时,您将知道它是否是一个新会话开始。

      【讨论】:

        【解决方案4】:

        您可以在 $(document).ready() 函数中检查 sessionStorage.length。 如果 sessionStorage 长度等于 0,那么您可能可以设置一个项目,例如您可以使用 jQuery.now() 存储页面加载时间的时间。 下次如果页面重新加载,可以检查长度是否不为0,表明同一个会话仍然存在。

        $(document).ready(function(){
          if(sessionStorage.length!=0){
            //do something
          }
          else{
            sessionStorage.setItem("time",jQuery.now());
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 2013-03-29
          • 1970-01-01
          • 2020-09-08
          • 2020-05-26
          • 2011-11-01
          • 1970-01-01
          相关资源
          最近更新 更多