Autor | Zpráva | ||
---|---|---|---|
lionel messi Profil |
#1 · Zasláno: 20. 12. 2013, 15:19:07
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 |
#2 · Zasláno: 21. 12. 2013, 03:28:24
Teoreticky může být problém v tom, když bude řetězec
bot na začátku user-agent a, 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); //... |
||
lionel messi Profil |
#4 · Zasláno: 21. 12. 2013, 13:57:43
Ď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 |
#5 · Zasláno: 21. 12. 2013, 14:41:12
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 |
#6 · Zasláno: 22. 12. 2013, 10:38:19
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 |
#7 · Zasláno: 22. 12. 2013, 22:16:04
A další věc, user agent nemusí být přítomný vůbec.
|
||
Časová prodleva: 10 let
|
0