tektyt
22.01.2004, 11:46:13
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
seaquest
22.01.2004, 11:58:43
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
22.01.2004, 12:14:16
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
gulldarek
22.01.2004, 12:33:55
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
seaquest
22.01.2004, 15:26:36
gulldarek niestety ani w operze ani w IE nie dziala....
gulldarek
22.01.2004, 15:34:08
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
22.01.2004, 15:51:20
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
22.01.2004, 15:57:22
zwykły header('Location:') powinien wystarczyc :wink:
gulldarek
22.01.2004, 16:05:45
seequest: u mnie nawet jak dam wstecz wszystko jest ok... (inny obrazek).
tektyt
22.01.2004, 16:12:12
moze i ja zrobilbym taka rejestracje z obrazkiem bo mam na razie zwykla, a jest jakis modul do generowania takich obrazkow z tekstem?
seaquest
22.01.2004, 16:22:48
a u mnie nie dziala i nie wiem dlaczego :?:
wcisne backspace i pojawia sie ta sama strona z tym samym obrazkiem
Bakus
23.01.2004, 01:13:02
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
23.01.2004, 08:51:15
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
24.01.2004, 20:54:13
ok wszystko pasi obrazka inaczej nie wstawie jak:
<img src="makeimg.php?formcontrol=93549054">
ale ja nadal moge dac wstecz i jest sam obrazek :!: