Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Uudelleenohjaus tietyn latausmäärän jälkeen

Sivun loppuun

Greg [17.01.2016 14:04:32]

#

Hei!

yritin etsiä haulla, mutta en löytänyt täällä jo kertaalleen ollutta php koodinpätkää, jolla sai selaimen päivittämään sivua x kertaa, jonka jälkeen tapahtuu uudelleenohjaus.

Nyt käytössä on vain tämä:

<?php
    header("Refresh: x; url=http://tähän tulee www osoite");
?>

Voisiko tuohon lisätä sen, että sivu päivittyy x määrän kertoja, jonka jälkeen tapahtuu sitten tuo uudelleenohjaus?

groovyb [17.01.2016 14:10:54]

#

Eikö tuota voisi helposti hanskata myös keksissä, ja latauksien x jälkeen nollata arvo ja uudelleenohjata?

Metabolix [17.01.2016 14:13:03]

#

PHP:n näkökulmasta jokainen päivitys on uusi sivunlataus, joten mitään suoraa lukumäärän asetusta ei ole. Voit kuitenkin pitää laskuria vaikka evästeessä. Toki käyttäjällä on mahdollisuus silloin nollata laskuri selaimen työkaluilla.

<?php
$laskuri = intval(@$_COOKIE["laskuri"]); // 0, jos ei ole asetettu
if ($laskuri < 100) {
  setcookie("laskuri", $laskuri + 1);
  header("Refresh: 5; url=A");
} else {
  header("Location: B");
}

Greg [17.01.2016 15:33:40]

#

Koodilla on sivuilla kaksi tarkoitusta.

1. Pitää käyttäjä x määrän aikaa sivuilla ennen uudelleenohjausta.
2. jaksottainen refresh tarkkailee että käyttäjällä on tietyt asetukset päällä koko sivuilla oloajan.(tukea muita scriptejä).

Aiemmin täällä ollut koodi oli suhteellisen yksinkertainen, eikä muistaakseni tarvinnut evästeitä. Ne ovat myös epävarmat, jos evästeet on pois kytketty tai niitä ei sallita sillä hetkellä.

Eli yksinkertainen koodi joka refreshaa sivua vaikkapa 10sek välein 10 kertaa jonka jälkeen tapahtuu uudelleenohjaus.

-tossu- [17.01.2016 16:29:28]

#

Miksi haluat päivittää sivun useasti ennen uudelleenohjausta ja tarkkailla käyttäjän asetuksia? Onko tarkoituksena estää käyttäjää kiertämästä sivuilla olevia skripteillä tehtyjä rajoituksia?

Grez [17.01.2016 16:39:48]

#

Eikös toi onnistu ilman evästeitä kun laittaa refreshin urliin sen laskurin arvon.

<?php
$laskuri = intval($_GET['step']) + 1;
if ($laskuri < 10) {
  header("Refresh: 5; url=tama.php?step=$laskuri");
} else {
  header("Location: toinen");
}

Greg [18.01.2016 14:29:31]

#

Kiitos Grez, tällä se onnistuu!

groovyb [18.01.2016 15:12:03]

#

Evästeitä tosiaan voi käyttäjä muokata suoraan selaimella, joten kyllä tuo backendissä kannattaa tehdä.

Metabolix [18.01.2016 18:35:48]

#

groovyb, millä tavalla tämä sitten mielestäsi pitäisi tehdä backendissa? Pitäisikö vaatia kirjautuminen ja käyttää istuntoja? Grezin ratkaisuhan on vielä evästeitäkin avoimempi, kun laskuri näkyy sivun osoitteessa, joten et varmaan sitä ehdota evästeiden korvaajaksi.

groovyb [18.01.2016 21:19:49]

#

Sessiota voi käyttää ilman kirjautumistakin. Eli pitää vaikka sessiossa sivulatausten määrää, ja mikäli arvo täyttyy, rendaa tarvittavat uudelleenohjauskilkkeet seuraavalla rendaamiskerralla.

En varsinaisesti PHP:ta kirjoittele, enkä edes osaa, mutta kaiketi johonkin tähän suuntaan:

<?php

//session_start(); jossakin missä sen kuuluu olla

if(!isset($_SESSION['reloadCounter'] ))
{
   $_SESSION['reloadCounter'] = 1;
}

if($_SESSION['reloadCounter'] == 5)
{
  $_SESSION['reloadPage'] = 1;
}
else
{
  $_SESSION['reloadCounter'] = $_SESSION['reloadCounter'] + 1;
}

if(isset($_SESSION['reloadPage']))
{
  unset($_SESSION['reloadPage']);
  unset($_SESSION['reloadCounter']);
  echo'
  <script>
    window.location = "redirect_kohde.php";
  </script>
  ';
}
else
{
  echo'
  <script>
    window.location.reload(true);
  </script>
  ';
}
?>

Metabolix [19.01.2016 17:21:57]

#

Istunto ei toimi tyhjästä, vaan istunto tunnistetaan yleensä evästeen tai GET-parametrin perusteella. Istunnon voi siis käytännössä tyhjentää poistamalla sen evästeen.

Grez [19.01.2016 17:35:56]

#

No onhan siinä se hyvä puoli, että uudelleenlatauskierrosten määrää ei voi vähentää.

Metabolix [19.01.2016 17:43:18]

#

Onhan siinä, joo. Toisaalta jos kysyjä kertoisi, mikä on koko sotkun tarkoitus, varmaan löytyisi vielä jokin 1000000%%% parempi ratkaisu.

Jaska [19.01.2016 19:31:05]

#

1000000%%% sievenee muotoon 1.

Metabolix [19.01.2016 19:32:37]

#

Hienoa, Jaska, oletpa viisas! Itse kun luulin, että prosenttimerkki tarkoittaa vain isoa lukua.

Jaska [19.01.2016 19:51:57]

#

No niinpä olenkin! Kyllä kai jokaiselle peruskoulun käyneelle on opetettu, että prosentti on sadasosa.

Grez [19.01.2016 20:10:52]

#

Kaikki peruskoulun käyneet ei silti sitä ymmärrä. Promilleista puhumattakaan :D

qeijo [22.01.2016 08:20:07]

#

Jaska kirjoitti:

(19.01.2016 19:51:57): No niinpä olenkin! Kyllä kai jokai­sel­le...

Prosentti on mitta jota käytetään ilmaisemaan suhteellista osuutta.
Taas 1% on sadasosa. :I


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta