Autor Zpráva
lionel messi
Profil
Zdravím,

na stránke sa snažím urobiť veľmi jednoduchú reklamu s čo najmenším použitím JavaScriptu, kt. neovládam, a preto si vypomáham PHP. Nechcem však, aby reklama miatla robotov. Je nasledujúca podmienka (zvýraznená časť kódu) postačujúca?

index.php (pred načítaním úvodnej stránky chcem zobraziť reklamu)
<?php
session_start(); // inicializujem session (cookies nechcem používať)
$agent = $_SERVER['HTTP_USER_AGENT']; // kopírujem superglobálne pole do lokálnej premennej
if (strpos($agent, "bot") == true ) // ak ide o robota, nechcem presmerovať, preto dám session
{
  $_SESSION['reklama'] = 1;
}
if (!isset($_SESSION['reklama'])) // testujem, či sme videli reklamu, ak nie, presmerujeme na ňu
{
  header ("Location: reklama.php");
}
?>
<!doctype html>
samotná stránka...

reklama.php - stránka s reklamou

<?php
session_start(); // inicializujeme session
// ak sme náhodou reklamu už videli, presmerujeme naspäť na index.php
if (isset($_SESSION['reklama']))
{
 header ("Location: index.php");
}
// ak nie, zaznamenáme videnie do session a reklamu zobrazíme
else
{
  $videne = 1;
  $_SESSION['reklama'] = $videne;
}
?>
<!doctype html>
Obrázková reklama
<script>
setTimeout("window.location.replace('index.html')", 10000); //po 10 sek. presmerujeme naspäť na hl. stránku
</script>
<noscript><p><a href="index.php">Pokračujte na hl. stránku</a></p></noscript><!-- ak náhodou máme vypnutý JS -->
Str4wberry
Profil
Teoreticky může být problém v tom, když bude řetězec bot na začátku user-agenta, potom podmínka if (strpos($agent, "bot") == true ) nebude spolehlivě fungovat.
Kubo2
Profil
lionel messi:
inicializujem session (cookies nechcem používať)
Sessions interne využívajú cookies, takže to máš jedno, je to to isté, a hlavne v tvojom prípade. Neviem si predstaviť človeka, ktorý by mazal cookie iba preto, aby si mohol zobraziť reklamu.

Je nasledujúca podmienka (zvýraznená časť kódu) postačujúca?
Teoreticky áno, v praxi však roboti posielajú server často falošnú hlavičku User-Agent, takže uvidia v podstate vždy len reklamu.

Kvôli prevencii pred tým, aby si náhodný vyhľadávač či robot indexujúci túto stránku, nepomýlil presmerovanie s trvalým premiestenením stránky, je vhodné príkaz header formulovať takto:
//...
header("Location: ...", true, 302);
//...
A to aj napriek tomu, že PHP posiela pri použití hlavičky Location defaultne tento kód.
lionel messi
Profil
Ďakujem veľmi pekne za odpovede.

Str4wberry:
Teoreticky může být problém v tom, když bude řetězec bot na začátku user-agenta, potom podmínka if (strpos($agent, "bot") == true ) nebude spolehlivě fungovat.

Rozmýšľal som nad tým, minimálne jeden takýto bot podľa všetkého môj web skutočne navštevuje. Je možné túto podmienku nejak upraviť? Písať tam strpos($agent, "bot") == 0 kvôli pretypovaniu asi nič nevyrieši.

Kubo2:
Ďakujem za podrobnú odpoveď, hlavičku určite upravím.
Kubo2
Profil
lionel messi:
Je možné túto podmienku nejak upraviť? Písať tam strpos($agent, "bot") == 0 kvôli pretypovaniu asi nič nevyrieši.
Rozmýšľaš správne.
Je možné (a bežne sa to tak rieši) porovnávať operátorom identity === a neidentity !==, ktorý porovnáva typ aj hodnotu namiesto obyčajného operátoru porovnania (ekvivalencie) ==, resp. !=.
Čiže:
if (strPos($agent, "bot") !== false) { ... }

Ďaľšia vec, ako sa vysporiadaš s prípadom, keď v slove Bot bude napríklad prvé písmeno veľké? Najprv by si mal asi previesť User-Agent string na malé písmená (lower-case):
if (strPos(strToLower($agent), "bot") !== false) { ... }

Ďakujem za podrobnú odpoveď
Za málo :-)
lionel messi
Profil
Kubo2:
Ďaľšia vec, ako sa vysporiadaš s prípadom, keď v slove Bot bude napríklad prvé písmeno veľké?
Tak na toto som úprimne povedané nemyslel.

Ešte raz vďaka.
preca1
Profil
A další věc, user agent nemusí být přítomný vůbec.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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