簡體   English   中英

將Javascript變量附加到Cookie

[英]Attach Javascript variable to cookie

我一直在努力,也許有人可以幫我嗎? 我的頁面上有一個JavaScript計數器,嘗試將其附加到Cookie( 關於此問題的我的第一個問題 ),這樣,如果用戶刷新頁面,計數器就不會再從0開始:

第1頁:

<head>
<script type="text/javascript">
var pageVisisted = new Date(); 
setInterval(function() {
    var timeOnSite = new Date() - pageVisisted;
    var secondsTotal = timeOnSite / 1000;
    var hours = Math.floor(secondsTotal / 3600);
    var minutes = Math.floor(secondsTotal / 60) % 3600;
    var seconds = Math.floor(secondsTotal)  % 60;
    document.getElementById('counter').innerHTML = hours + ":" + minutes + ":" + seconds;
}, 1000);
</script>
<?php
setcookie(AboutVisit, pageVisisted);
session_start();
?>
</head>

第2頁:

$cookid = $_COOKIE['AboutVisit'];
echo $cookid;

但是然后我得到顯示:pageVisisted

setcookie(AboutVisit, pageVisisted); 不會捕獲pageVisited的值,因為這是一個JavaScript變量。 JavaScript在用戶的瀏覽器中運行,而PHP對此不了解。 PHP僅知道其PHP塊中的內容。 換句話說,它將看到您的代碼,如下所示:

Arbitrary text
<?php
setcookie(AboutVisit, pageVisisted); // What is pageVisited?!
session_start();
?>
Arbitrary text

確實,就跟蹤某人在您頁面上的停留時間而言,您不需要涉及PHP,除非您需要在服務器上使用該信息。 相反,您的JavaScript可以負責維護cookie。 不幸的是,JavaScript本身具有處理Cookie的可怕且違反直覺的API。 @vascowhite鏈接的文章提供了一組很好的輔助JavaScript函數,您可以使用它們來簡化操作。 通過添加一些輔助功能,您的JavaScript可能如下所示:

function createCookie(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 readCookie(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;
}

// Read the cookie; if it's not there, start at the current date
var cookieVal = readCookie('AboutVisit');
var pageVisisted = cookieVal ? parseInt(cookieVal) : new Date().milliseconds;
if (!cookieVal) {
    createCookie('AboutVisit', pageVisited.toString());
}

setInterval(function() {
    var timeOnSite = new Date().milliseconds - pageVisisted;
    var secondsTotal = timeOnSite / 1000;
    var hours = Math.floor(secondsTotal / 3600);
    var minutes = Math.floor(secondsTotal / 60) % 3600;
    var seconds = Math.floor(secondsTotal)  % 60;
    document.getElementById('counter').innerHTML = 
        hours + ":" + minutes + ":" + seconds;
}, 1000);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM