【问题标题】:Browsed Time Problem浏览时间问题
【发布时间】:2010-06-12 05:05:55
【问题描述】:

我想显示一个用户的浏览时间,但是当我刷新它时,它将再次从 0:0:0 开始。 怎么处理?

<?php
 $total_mints=($live_match['match_name']) * (60);

?>
<script language="javascript">
display_c(<?=$total_mints?>,'ct');
</script>

<script type="text/javascript">
function display_c(start,div){

window.start = parseFloat(start);
var end = 0 // change this to stop the counter at a higher value
var refresh=1000; // Refresh rate in milli seconds
if(window.start >= end ){

mytime=setTimeout("display_ct('"+div+"')",refresh)
}
else {alert("Time Over ");}
</script>

【问题讨论】:

    标签: php javascript


    【解决方案1】:

    一旦时间结束,您可以将 cookie 设置为“已过期”...当页面加载时,如果 cookie 为“已过期”,那么您可以显示“已过期”警报。您还可以使用 cookie 来跟踪累积的浏览时间。

    编辑 - 添加了一些细节...但我认为您必须再考虑一下。

    基本上,您想在用户使用页面时使用 JS 写入 cookie,而您希望在页面加载时使用 PHP 读取 cookie。您可以使用 cookie 来仅跟踪时间是否已到、总累积时间或两者兼而有之。我想你想每分钟左右更新一次 cookie?

    它会看起来像这样SOMETHING - 此代码仅显示如何使用 cookie 跟踪时间是否已过期,而不是累积时间。

    <?php
    $total_mints=($live_match['match_name']) * (60);
    // check for cookie and only proceed if it is not expired
    // can also use cookie to keep track of total accumulated number
    // of minutes between session
    if ($_COOKIE["yourMints"] != "expired")
    {
        ?>
        <script language="text/javascript">
            display_c(<?php echo $total_mints; ?>,'ct');
        </script>
        <script type="text/javascript">
        function display_c(start,div)
        {
            window.start = parseFloat(start);
            var end = 0 // change this to stop the counter at a higher value
            var refresh=1000; // Refresh rate in milli seconds
            if(window.start >= end )
            {
                mytime=setTimeout("display_ct('"+div+"')",refresh)
            } else 
            {
                alert("Time Over ");
                // set cookie to expired
                document.cookie = "yourMints=expired";  
            }
        }
        </script>
        <?php
    } else // What follows is what happens if cookies IS expired
    {
        ?>
        <script type="text/javascript">
            alert("Time Over ");               
        </script>
        <?php
    }
    ?>
    

    这是一个很好的 JS cookie 教程: http://www.quirksmode.org/js/cookies.html

    这里是使用 $_COOKIE 通过 PHP 读取 cookie http://php.net/manual/en/reserved.variables.cookies.php

    编辑:在看到 PlagueEditor 的示例后在 JQuery 示例中添加。

    不错的脚本 PlagueEditor。以为我会尝试使用 JQuery 来做同样的事情。

    JQuery 有一个simple little cookie plugin...只有 40 行左右的代码。 这是一个带有 cookie 存储计时器的页面和 10 秒的超时时间,可能会重置:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <title>Time Spent on Page</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <script type="text/javascript" src="PATH-TO-YOUR-JQ-DIRECTORY/jquery-1.4.2.min.js"></script>
            <script type="text/javascript" src="PATH-TO-YOUR-JQ-DIRECTORY/cookie.js"></script>
            <script type="text/javascript">
            <!--
                $.myTimer = 
                {
                    timeLimit: 10,
                    displayTime: function ()
                    {
                        if ($.myTimer.time < $.myTimer.timeLimit)
                        {
                            $("#timeHere").html($.myTimer.time);                 
                            $.cookie('yourMints', $.myTimer.time, { expires: 7});     
                            ++$.myTimer.time;
                            $.myTimer.toggle = setTimeout("$.myTimer.displayTime()",1000);
                        } else
                        {
                            $("#page").html('<h1>Time expired</h1>');
                        }
                    }
                }
                // When the page is ready ==================================================
                $(document).ready(function()
                {
                    // Read time spent on page cookie. Set it, if it doesn't exist.
                    if (!$.cookie('yourMints'))
                    {
                        $.cookie('yourMints', '0', { expires: 7});                 
                    }
                    $.myTimer.time = $.cookie('yourMints');
                    // Start timeer
                    $.myTimer.displayTime();
                    // Reset the timer
                    $("#reset").click( function() 
                    {        
                        $.cookie('yourMints', '0');
                        window.location.reload();
                    });
                });
            // -->
            </script>
        </head>
        <body>
            <div id="page">
                <h2>Your total time here: <span id="timeHere"></span></h2>
                You can only look at this page for 10 seconds.
            </div>
            <input id="reset" type="button" value="Reset Timer" /> 
        </body>
    </html>
    

    【讨论】:

    • 我尝试使用您的代码并添加了一个 cookie 可能如何工作的示例.....这很粗糙。
    【解决方案2】:

    以下是跟踪浏览时间的解决方案,即使刷新也是如此。它获取页面加载的日期,并且每秒从给定日期中减去该日期。然后日期显示在跨度中。该页面应自行工作。我希望这是您正在寻找的,或者至少有帮助。两个函数是 W3Schools 示例*。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <title></title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <body>
            <script type="text/javascript">
                /**
                 * getCookie and setCookie were taken from http://www.w3schools.com/JS/js_cookies.asp.
                 */
                function getCookie(c_name)
                {
                    if (document.cookie.length>0)
                    {
                        c_start=document.cookie.indexOf(c_name + "=");
                        if (c_start!=-1)
                        {
                            c_start=c_start + c_name.length+1;
                            c_end=document.cookie.indexOf(";",c_start);
                            if (c_end==-1) c_end=document.cookie.length;
                            return unescape(document.cookie.substring(c_start,c_end));
                        }
                    }
                    return "";
                }
    
                function setCookie(c_name,value,expiredays)
                {
                    var exdate=new Date();
                    exdate.setDate(exdate.getDate()+expiredays);
                    document.cookie=c_name+ "=" +escape(value)+
                        ((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
                }
    
                var totalTime=0;
    
                var storedTime=getCookie("storedTime");
                if(storedTime.length == 0){
                    //If it doesn't exist..
                    storedTime=0;
                }else{
                    storedTime=parseInt(storedTime);
                    totalTime=storedTime;
                }
    
                function updateTime(){
                    totalTime+=1000;
                    document.getElementById("duration").innerHTML= Math.ceil(totalTime / 1000);
                }
    
                onbeforeunload = function(){
                    setCookie("storedTime",totalTime,3);
                }            
                setInterval(updateTime, 1000);
            </script>
            Your total time here: <span id="duration"><script type="text/javascript">document.write( Math.ceil(totalTime / 1000));</script></span> seconds...
        </body>
    </html>
    

    【讨论】:

    • 不错。每次调用 updateTime 时,您也可以使用一个变量将秒数增加一......而不是日期的所有麻烦。
    • 越想越有你这么好的观点;我已经编辑了我的帖子以反映这些变化。谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 2021-01-07
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2020-11-17
    • 2011-03-13
    相关资源
    最近更新 更多