【问题标题】:Show div only once per user session? [duplicate]每个用户会话仅显示一次 div? [复制]
【发布时间】:2017-04-25 11:56:17
【问题描述】:

如何做到这一点?如果有帮助,我有 jQuery。

<div id="RLAD-wrapper">
    <div id="RLAD">
        <p>stuff</p>
    </div>
</div>

【问题讨论】:

  • 你到底是什么意思?什么是“用户会话”?据我所知,您想在显示 &lt;div/&gt; 的同一页面上写出一个 PHP 会话。然后,如果会话变量存在,则不显示。一旦他们离开您的网站,会话就会被销毁,并且会在他们下次访问时再次显示。
  • @icecub 那么你有什么推荐的?我只是不希望用户每次都觉得这是强加于他们的。也许每三天一次?
  • @DerrickStewart 当用户登陆页面时,在页面显示后创建一个 cookie,然后只需检查该 cookie 以查看是否应该显示消息stackoverflow.com/questions/1458724/…
  • @DerrickStewart - 你到底想做什么? \允许该 div 仅在会话开始时显示,而不是在客户端返回时显示?
  • 这取决于&lt;div/&gt; 包含的具体内容。显然,如果它包含重要信息,您不想等待那么长时间再次显示它。另一方面,如果它提醒您做一些对您的访问者不重要的事情:例如,说一个 facebook upvote,您不希望它变得烦人。否则你会失去访客。 ppl 是否每天都访问您的网站?他们一天会多次访问吗?如果是,那么 3 天是可以接受的。如果没有,您可能希望将其延长至 7 天,具体取决于人们访问您网站的频率。顺便说一句,cookie 将是一种方法

标签: javascript jquery


【解决方案1】:
if(localStorage.getItem("iknowyou")) {
  document.body.innerHTML = "You were already here";
} else {
  document.body.innerHTML = "Oh. A new guest...";
  localStorage.setItem("iknowyou", "true");
}

这利用localStorage 跨会话存储持久状态。

【讨论】:

    【解决方案2】:

    您也可以使用 cookie:

        <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    <div class="mydiv" style="display: none;">
        this is a div
    </div>
    <script
            src="https://code.jquery.com/jquery-3.1.1.slim.min.js"
            integrity="sha256-/SIrNqv8h6QGKDuNoLGA4iret+kyesCkHGzVUUV0shc="
            crossorigin="anonymous"></script>
    <script>
        $(function() {
            // Cookies
            function setCookie(name, value, days) {
                if (days) {
                    var date = new Date();
                    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                    var expires = "; expires=" + date.toGMTString();
                }
                else var expires = "";
    
                document.cookie = name + "=" + value + expires + "; path=/";
            }
    
            function getCookie(name) {
                var nameEQ = name + "=";
                var ca = document.cookie.split(';');
                for (var i = 0; i < ca.length; i++) {
                    var c = ca[i];
                    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
                    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
                }
                return null;
            }
    
    //        Validate cookie
            var myCookie = getCookie("MyCookie");
            if (myCookie == null) {
    //                alert('No cookei');
                $('.mydiv').css('display','block');
                setCookie("MyCookie", "foo", 7);
            }
            else {
    //                alert('yes cookei');
                $('.mydiv').css('display','none');
            }
        });
    </script>
    </body>
    </html>
    

    【讨论】:

    • 感谢大家的帮助!
    • 不客气。 ;-)
    【解决方案3】:

    下面的代码将localStorage中的一个项目设置为Date.now,并检查它是否超过3天。该项目的设置在else 语句中,以防止用户在每次运行网站时都重置时间。

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8">
            <title>Put anything you want here</title>
        </head>
        <body>
            <div id="aDiv">
                Div content
            </div>
            <script>
                if(Date.now() - parseInt(localStorage.getItem("pageVisitedTime").getTime(), 10) < 2.592e+8){
                    document.getElementById("aDiv").style.display = "none";
                }
                else{
                    localStorage.setItem("pageVisitedTime", "" + Date.now());
                }
            </script>
        </body>
    </html>
    

    【讨论】:

    • 这不是浏览器世界中“用户会话”的含义。
    • @bekim 不是,那是什么?它在 cmets 中指定为“每三天一次”。现在,如果“用户会话”真的是它的意思,那就意味着使用sessionStorage但这并不意味着!!!所以,我的代码来了。
    • 好吧,在这种情况下,操作员需要用他真正的意思来纠正他的问题。
    • @BekimBacaj 用户会话的含义是有争议的。有人会说这是从访问者进入网站的那一刻到他们离开的那一刻。其他人会说这是从他们登录到他们再次注销的那一刻,但仅限于那一次访问。否则,它不算作一个会话。密钥是user。这可以指网站的用户或网站的成员。因此,我对问题本身的第一条评论是:What is "a user session"?
    • 我认为 OP 需要在这里决定什么是“用户会话”。如果 OP 在这个特定领域更具体,我会更新我的答案。虽然,我假设这意味着按常规时间,不受其他任何影响,因为对于上述两个选项来说,3 天有点太多了。
    猜你喜欢
    • 2023-03-10
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多