Autor Zpráva
leorond
Profil
Ahoj, udělal jsem si souhlas o ukládání cookies ale nevím zda jsem to udělal správně a i přes to že to funguje bych chtěl znát váš názor zda je to OK.

<?php 
session_start();
?>
<style>
.eu-cookies {
    position: fixed;
    left: 0;
    top: 0;
    padding:10px;
    width: 100%;
    color: #000;
    background-color: #FFF;
    z-index: 1000;
}

.eu-cookies button {
    background:#FFF;
    color:#444;
    margin:10px;
    padding:5px 5px;
    border:1px solid #444;
    -webkit-border-radius:3px;
    -moz-border-radius:3px;
    -ms-border-radius:3px;
    -o-border-radius:3px;
    border-radius:3px;
}
.eu-cookies button:hover {
    background:#444;
    color:#FFF;
    cursor:pointer;
}
.eu_cookies_no {
    display:none;
}
</style>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"></meta>
    </head>
    <body>
<?php
if(isset($_POST['ok_cookies_souhlas']))
{
    $_SESSION['ok_cookies']    =    $_POST['ok_cookies'];
}
if(!empty($_SESSION['ok_cookies']))    {
    $cookies    =    "eu_cookies_no";
}
else    {
    $cookies    =    "eu-cookies";
}
?>
<div class="<?php echo $cookies;?>">
    <p>Tento web používá k poskytování služeb, personalizaci reklam a analýze
    návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte.</p>
    <form action="" method="post">
        <input type="hidden" name="ok_cookies" value="true">
        <input type="submit" name="ok_cookies_souhlas" value="Souhlasím">
    </form>
    <a href="https://www.google.com/policies/technologies/cookies/">Další informace</a>
</div>

Moc děkuji za pomoc
user
Profil *
Ano, bude to takhle fungovat, ale nebylo by lepší vůbec zprávu nevypisovat, než display: none.
Za další lepší by bylo ukládat proměnou do cookies, kde si nastavíš platnost než do session, která vyprší za 20 minut nebo po zavření prohlížeče.
Jinak já to mám celé řešené přes JavaScript.
leorond
Profil
Omlouvám se ale dostal jsem se na to až dnes.

user: Myslíš udělat to nějak takto?

if(!$_COOKIE['souhlas']){
    if($_GET['souhlas'] != 'ano')    {
        echo    "<div class=\"eu-cookies\">
                    <p>Tento web používá k poskytování služeb, personalizaci reklam a analýze
                    návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte.</p>
                    <a href=\"index.php?souhlas=ano\">Souhlasim se vstupem</a>
                    <a href=\"https://www.google.com/policies/technologies/cookies/\">Další informace</a>
                </div>";
    }
    else    {
        setcookie("souhlas","ano",time()+31536000);
        header("Location: index.php");
    }
}
juriad
Profil
leorond:
Ještě lépe, vždyť vůbec není třeba reloadovat stránku. Cookie můžeš nastavit přímo JS:
<?php
if (! isset($_COOKIE['souhlas'])) {
?>
<script>
  function cookieSouhlas() {
    var potvora = document.getElementById('cookie-potvora');
    potvora.parentNode.removeChild(potvora);
    var d = new Date(+new Date() + 365*24*3600*1000); // in milliseconds
    document.cookie = 'souhlas=ano;path=/;expires='+d.toGMTString()+';'; // Tady přebýval alert
  }
</script>
 
<div id="cookie-potvora">
  <p>Tento web používá k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte.</p>
  <button type="button" onclick="cookieSouhlas()">Souhlasím</button>
  <a href="https://www.google.com/policies/technologies/cookies/">Další informace</a>
</div>
<?php } ?>
leorond
Profil
juriad: Tvůj příklad mi nefunguje jak by měl, pokud kliknu na šipku zpět tak se dialog ukáže znovu a cookies to neuloží.
Musím script upravit nebo ti funguje tento script?
juriad
Profil
Když klikneš na tlačítko zpět, tak se stránka načítá z paměti prohlížeče, tedy bude ve stavu, ve kterém byla, když jsi ji naposledy navštívil.
Stejným problémem, si troufám tvrdit, musela trpět i ta implementace v PHP.
leorond
Profil
No popravdě mé druhé řešení s použitím $_COOKIE mohu vracet šipkou a obnovovat stránku jak šílený a dialog se znovu nezobrazí ale u tvého řešení když obnovím stránku nebo kliknu na šipku zpět tak mi dialog vyskočí stejně jako by vůbec nebylo kliknuto na button.
juriad
Profil
leorond:
Omlouvám se, zbyl na 9. řádce alert. Zkus teď.
leorond
Profil
Také se omlouvám ale JS moc nerozumím.

Nyní script funguje jak má a také mu nevadí šipka zpět.

Děkuji
leorond
Profil
A ještě jedna otázečka juriad, počítá ten JS také s tím že ho uživatel bude mít vypnutý?
user
Profil *
leorond:
Jak může javascript počítat s tím že je vypnutý když je vypnutý?
juriad
Profil
Nepočítá. Lze to však rozšířit tak, aby počítal. Otázkou je, zda je potřeba vůbec od uživatele nějaký souhlas, pokud má vypnutý JS. (Pak by stačilo přesunout ten div do scriptu a vypisovat jej pomocí document.write)

Mohl bys mít neprůstřelé řešení, ale to otravuje uživatele ještě víc, protože dochází ke znovu načtení stránky, čímž uživatel může přijít o nějaká data. Nejde to udělat tak jednoduše, jak ukazoval leorond). Formulář musí být odesílán pomocí POSTu a po zpracovní musí proběhnour přesměrovaní na původní stránku. Kvůli tomu musíš formulářem předávat aktuální adresu, což obecně (rozuměj použití mod-rewite) není triviální.

Od IE9 by šlo udělovat souhlas asynchronně čistě v HTML a CSS bez použití JS.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: