Informacje o plikach cookie na forum SMF

0

Na forum SMF (Simple Machines) chcę dodać informacje o tym, że strona wykorzystuje ciasteczka. Kiedyś bawiłem się w php i miałem krótki epizod w javascript. Forum to jest na potrzeby własne i z braku czasu nie wgłębiałem się w to jak co jest zrobione tylko je zainstalowałem. Przypomniałem sobie, które polecenie w js wywołuje wyskakujące okno i dodałem następujący kod do pliku index.php:

 
<script language="javascript" type="text/javascript">
alert('Inforacje o cookie itp itd');
</script>

Jednak jak później zauważyłem co nie jest w sumie żadną niespodzianką, komunikat ten pojawia się przy każdym przeładowaniu strony. Jak to obejść? Pierwsza myśl to było stworzenie zmiennej statycznej w js która zlicza liczbę odświeżeń i gdy ta jest większa od 0 to zaprzestaje wywoływać komunikat. O ile znalazłem sposób na stworzenie zmiennej statycznej przy pomocy js o tyle nie mam pewności co do tego jak się to będzie zachowywać bo podejrzewam, że zmienna ta będzie się inkrementować nie zależnie od tego kto odwiedza tą stronę. Miałem też pomysł aby w kodzie źródłowym sprawdzać która zmienna odpowiada za to czy użytkownik jest zalogowany i na podstawie tego wysyłać komunikat jednak nie będzie to działało w przypadku nie zalogowanego użytkownika.

0

bo podejrzewam, że zmienna ta będzie się inkrementować nie zależnie od tego kto odwiedza tą stronę

JS działa po stronie klienta, nie serwera.


Odnośnie problemu: użyj ciasteczek do tego...
0

Każda zmienna i tak Ci się wyzeruje po odświeżeniu.
Paradoksalnie, żeby zapamiętać informację o tym czy komunikaty był wyświetlony - musisz użyć cookies. Więc wywalasz komunikat i zapisujesz ciasteczko. Wedle tego chorego prawa z tego co wiem - możesz od razu zapisywać ciasteczka (tak robi większość stron) - jeżeli był komunikat o tym, że użytkownik może sobie zmienić ustawienia przeglądarki i pozbyć się tych ciastek - to będzie ok.
Z drugiej strony - alert() to megairytująca rzecz. Jeżeli ktoś sobie wyłączy ciastka (w co wątpię) to Twoja strona stanie się upierdliwa.
Najlepiej: Stwórz sobie diva o id cookies-popup - na samej górze strony, gdzie będzie wyświetlany komunikat. Oprócz tego wstaw w nim <button onclick="cookies_hide();">OK</button>. Div ten niech będzie domyślnie ukryty (css display: none;) Potem na stronie daj:

function cookies_info() {
    if (!cookies.get('cookie-policy')) {
        var cp = document.getElementById('cookies-popup');
        if (cp) {
            cp.style.display="block";
        }
    }
}
function cookies_hide() {
    cookies.set('cookie-policy', 1);
    var cp = document.getElementById('cookies-popup');
    if (cp) {
        cp.style.display="none";
    }
}

cookies = {};
cookies.set = function(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=/";
};


// TE FUNKCJE TAK NAPRAWDE CI NIE SA POTRZEBNE, MOZESZ USUNAC
cookies.get = function (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;
};

cookies.remove = function(name) {
    cookies.set(name,"",-1);
};

Ten skrypt wrzuć w osobny plik np. cookies.js i dodaj do strony przez <script src="cookies.js"></script>

1 użytkowników online, w tym zalogowanych: 0, gości: 1