Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mam pytanie jak uniknac komunikatów "Uwaga: Strona wyga
Forum PHP.pl > Forum > PHP
tektyt
Witam
Mam problem bo jak robie czesto back u siebie na swoich stronach to czesto pojawia mis ie komunikat "Uwaga: Strona wygasła", i za kazdym razem trzeba robic odswierzenie i jest ok. Jak tego uniknac?
Pozdrawiam
rzseattle
http://forum.php.pl/viewtopic.php?t=9310
seaquest
a ja mam calkiem odwrotny problem

zrobilem formularz logowania za zabezpieczeniem w postaci wpisania kodu bezpieczenstwa (jest na obrazku) wszystko byloby ok, ale jak ktos wcisnie "wstecz" pojawia sie strona z tym samym obrazkiem

zastosowalem meta => no-cache i expires ustawilem na date, w ktorej strona jest otwierana...
nic nie dziala.....
rzseattle
Ja jakos nie ufam headerom o nie cachowaniu strony.

Mozesz zrobic to w ten sposob jak komus juz pisalem :
Cytat
Mozesz inkrementowac w sessji jedna zmienna jednoczesnie dolaczajac ja do linku. Jesli zmienna w linku bedzie mniejsza od tej w sesji (przed inkrementacja) to znaczy ze uzytkownik sie cofnal i mozesz wtedy z exit skorzystac

Tylko zamiast exita mozesz dac headera odswiezajacego winksmiley.jpg
gulldarek
Co do nagłówków to ja zawsze daje:

[php:1:ead195f950]<?php

header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Cache-control: private");
?>[/php:1:ead195f950]

i jeszcze nigdy mnie nie zawiodło smile.gif
seaquest
gulldarek niestety ani w operze ani w IE nie dziala....
gulldarek
JA w rejestracji tez mam sprawdzanie obrazka. Po wpisaniu danych i wyslaniu ich sprawdzam czy dane sa ok i jesli nei to powracam do strony rejestracji i wypisuje wszystkie bledy (obrazek jest juz inny!)
seaquest
dobra, ale wyobraz sobie robota, ktory probuje sie wlamac

haker podaje mu najpierw haslo, ktore jest na obrazku, potem robot probuje, jak mu sie nie uda, wywoluje java script:history.back(-1) i ma nadal ten sam kod na obrazku, po prostu tego chce uniknac :!:
menic
zwykły header('Location:') powinien wystarczyc :wink:
gulldarek
seequest: u mnie nawet jak dam wstecz wszystko jest ok... (inny obrazek).
tektyt
moze i ja zrobilbym taka rejestracje z obrazkiem bo mam na razie zwykla, a jest jakis modul do generowania takich obrazkow z tekstem?
seaquest
a u mnie nie dziala i nie wiem dlaczego :?:
wcisne backspace i pojawia sie ta sama strona z tym samym obrazkiem
Bakus
obrazek wstawiaj jako np.:
[php:1:1d211c62dd]<?php
print '<IMG SRC="token.php?' . mt_rand() . md5(microtime()) . mt_rand() . '">';
?>[/php:1:1d211c62dd]

Sposób drugi - lepszy:
[php:1:1d211c62dd]<?php
$fn = md5(microtime() . mt_rand()) . ".php";
$f = fopen($fn, "w");
fwrite($f, '<?php' . "n");
fwrite($f, ' require("token.php");' . "n");
fwrite($f, '?>' . "n");
fclose($f);
print '<IMG SRC="' . $fn . '">';
?>[/php:1:1d211c62dd]

Wytłumaczenie:
W pierwszym przykładzie dodajesz tylko parametr... niekiedy MsIE nie przeładowywuje takich obrazków...
W drugiej metodzie tworzysz plik php o automatycznie generowanej i w miarę losowej nazwie w którym wszytywany jest skrypt generyjący obrazek...
By druga wersja działała poprawnie musisz dodać na początku (tak będzie najlepiej) pliku przetwarzającego formularz, funkcj usuwającą plik z obrazkiem by nie zaśmiecał Ci już miejsca na serwerze...
gulldarek
Ja mam inaczej:

funkcje.php :

[php:1:93bdff17c4]<?php
// Funkcja losujaca haslo na obrazku

function fetch_registration_string($length)
{
$chars = '2346789ABCDEFGHJKLMNPRTWXYZ';

for ($x = 1; $x <= $length; $x++)
{
$number = rand(1, strlen($chars));
$word .= substr($chars, $number - 1, 1);
}

return $word;
}

function registrationimage(&$image, $type = 2, $headers = 1)
{

// Proba utworzenia gifa.
if ($type == GIF AND IMAGEGIF)
{
if ($headers)
{
header('Content-type: image/gif');
}
@imagegif($image);
imagedestroy($image);
return true;
}

// Probujemy utworzyc Png z Png lub Gif'a z Png jesli pierwszy krok zawiodl
if (!IMAGEJPEG AND IMAGEPNG)
{
if ($headers)
{
header('Content-type: image/png');
}
@imagepng($image);
imagedestroy($image);
return true;
}

// Probujemy utowrzyc jpg, png lub gif jesli kroki 1 i 2 zawiodly
if (IMAGEJPEG)
{
if ($headers)
{
header('Content-type: image/jpeg');
}
@imagejpeg($image);
imagedestroy($image);
return true;
}

return false;
}

?>[/php:1:93bdff17c4]

rejestruj.php:

(sekcja $do == register)

[php:1:93bdff17c4]<?php
// Jesli admin wlaczyl sprawdzanie obrazka i jest gd to:

if ($options['regimagecheck'] AND $options['gdversion'])
{
$string = fetch_registration_string(6);

$imagehash = md5(uniqid(rand(), 1));

// Tworzymy has i wrzucamy do bazy
$DB_site->query("INSERT INTO regimage (regimagehash, imagestamp, dateline) VALUES ('" . addslashes($imagehash) . "', '" . addslashes($string) . "', " . TIMENOW . ")");

$show['regimagecheck'] = true;
}
else
{
$show['regimagecheck'] = false;
}
?>[/php:1:93bdff17c4]

regimage.php

(sekcja $do == "addmember")

[php:1:93bdff17c4]<?php
// Sprawdzamy czy tekst wpisany w input pokrywa sie z tekstem na obrazku
if ($options['regimagecheck'] AND $options['gdversion'])
{
$imagestamp = trim(str_replace(' ', '', $_POST['imagestamp']));
$ih = $DB_site->query_first("SELECT imagestamp FROM regimage WHERE regimagehash = '" . addslashes($_POST[imagehash]) . "'");
if (!$imagestamp OR strtoupper($imagestamp) != $ih['imagestamp'])
{
eval('$errors[110] = "Tekst który wpisałeś nie jest taki jak z obrazka";');
$DB_site->query("DELETE FROM regimage WHERE regimagehash = '" . addslashes($_POST[imagehash]) . "'");
unset($imagestamp);
unset($_POST['imagehash']);
unset($_POST['imagestamp']);
}
}

// Jesli nie bylo bledow
if (sizeof($errors) == 0){

$show['errors'] = false;
// Usuwamy tekst i hash obrazka, zeby nikt inny nie mogl go uzyc
if ($options['regimagecheck'] AND $options['gdversion'])
{
$DB_site->query("DELETE FROM regimage WHERE regimagehash = '" . addslashes($_POST['imagehash']) . "'");
}

}

?>[/php:1:93bdff17c4]

szablon register.htm:

[xml:1:93bdff17c4] <if show="regimagecheck">
<fieldset class="fieldset">
<legend>Weryfikacja Obrazka</legend>
<table cellpadding="0" cellspacing="3" border="0">
<tr>
<td colspan="2">
Proszę wpisać tekst widoczny na obrazku po prawej. Jest to wymagane, aby stwierdzić, że rejestracji nie przeprowadza zautomatyzowany proces.
</td>
</tr>
<tr>
<td><input type="text" class="bginput" name="imagestamp" size="30" maxlength="6" value="{imagestamp}" /><input type="hidden" name="imagehash" value="{imagehash}" /></td>
<td><img src="image.php?hash={imagehash}" alt="Obrazek Rejestracyjny" width="200" height="60" border="0" /></td>
</tr>
</table>
</fieldset>
</if>[/xml:1:93bdff17c4]

image.php

[php:1:93bdff17c4]<?php

include 'config.php';
include 'funkcje.php';

if (!$_REQUEST['hash'])
{
header('Content-type: image/gif');
readfile("images/blank.gif");
exit;
}

$imageinfo = $DB_site->query_first("SELECT imagestamp FROM regimage WHERE regimagehash = '{$_REQUEST['hash']}'");

$string = $imageinfo['imagestamp'];

for ($x = 0; $x < strlen($string); $x++)
{
$newstring .= $string["$x"] . ' ';
}
$string = ' ' . $newstring . ' ';

// Tymczasowy obrazek na ktory nakladamy napis
$temp_width = 135;
$temp_height = 20;
// Powiekszony obrazek.
$image_width = 200;
$image_height = 60;

$temp = imagecreate($temp_width, $temp_height);
$image = imagecreate($image_width, $image_height);

$colors = array(
1 => array('255,255,255', '0,0,0'), // czarne na bialym
2 => array('0,0,0', '255,255,255'), // biale na czarnym
3 => array('255,0,0', '255,255,0'), // zolte na czerwonym
4 => array('255,255,0', '255,0,0'), // czerwone na zoltym
5 => array('255,128,0', '50,50,255'), // niebieskie na pomaranczowym
6 => array('50,50,255', '255,128,0'), // pomaranczowe na niebieskim
);

mt_srand((double)microtime() * 1000000);
$randcolor = mt_rand(1, sizeof($colors));
$bg = explode(',', $colors["$randcolor"][0]);
$fg = explode(',', $colors["$randcolor"][1]);

$background_color = imagecolorallocate($temp, $bg[0], $bg[1], $bg[2]); //biale tlo
imagefill($temp, 0, 0, $background_color); // dla GD2+
$text_color = imagecolorallocate($temp, $fg[0], $fg[1], $fg[2]); //czarny tekst

imagestring($temp, 5, 0, 2, $string, $text_color);
imagecopyresized($image, $temp, 0, 0, 0, 0, $image_width, $image_height, $temp_width, $temp_height);
imagedestroy($temp);

$background_color = imagecolorallocate($image, $bg[0], $bg[1], $bg[2]); //biale tlo
$text_color = imagecolorallocate($image, $fg[0], $fg[1], $fg[2]); //czarny tekst

// linia pionowa
for ($x = 0; $x <= $image_height; $x += 20)
{
imageline($image, 0, $x, $image_width, $x, $text_color);
}

// linia pozioma
for ($x = 0; $x <= $image_width; $x += 20)
{
imageline($image, $x, 0, $x, $image_height, $text_color);
}

// losowe piksele
$pixels = $image_width * $image_height / 10;
for ($i = 0; $i < $pixels; $i++)
{
imagesetpixel($image, rand(0, $image_width), rand(0, $image_height), $text_color);
}

// fale
$wavenum = 3;
$wavemultiplier = ($wavenum * 360) / $image_width;

// fale cd.
$curX = 0;
$curY = $image_height;
for ($pt = 0; $pt < $image_width; $pt++)
{
$newX = $curX + 1;
$newY = ($image_height/2) + (cos(deg2rad($newX * $wavemultiplier)) * ($image_height/2));
ImageLine($image, $curX, $curY, $newX, $newY, $text_color);
$curX = $newX;
$curY = $newY;
}

// fale cd.
$curX = 0;
$curY = 0;
for ($pt = 0; $pt < $image_width; $pt++)
{
$newX = $curX + 1;
$newY = ($image_height/2) + (sin(deg2rad($newX * $wavemultiplier - 90)) * ($image_height/2));
ImageLine($image, $curX, $curY, $newX, $newY, $text_color);
$curX = $newX;
$curY = $newY;
}

registrationimage($image);
?>[/php:1:93bdff17c4]
seaquest
ok wszystko pasi obrazka inaczej nie wstawie jak:

<img src="makeimg.php?formcontrol=93549054">

ale ja nadal moge dac wstecz i jest sam obrazek :!:
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.