Otóż w jaki sposób miogę zapobiec takiej styuacji
Po przesłaniu formularza wykonuję jakiś kod, np przywrócenie hasła.
Lecz gdy nacisnę F5 strona się odświeża i w przeglądarce dalej jest POST, co powoduje, że można od razu wykonać tego posta.
Robię to headerami ale nie skutkuje, uzywam smarty:
<?php
require_once('/includes/main_inc.php');
require_once('/includes/functions.php');
// css include
$smarty->assign('css_inc', $css_inc);
//
// site meta data
switch($_GET['action']){
case 'login'<span style="color: #007700"<span style="color: #007700":
$site_title='Logowanie';
$site_keywords=', zaloguj się, logowanie';
$site_description='Zaloguj się do portalu podróżniczym atotam.pl. Zyskaj więcej funkcji jako zalogowany użytkownik.';
break;
case 'recover'<span style="color: #007700"<span style="color: #007700":
$site_title='Odzyskaj zapomniane hasło';
$site_keywords=', odzyskaj hasło, zapomniane hasło, zapomniałeś hasła';
$site_description='Jeśli nie pamiętasz swojego hasła, możemy ci przysłać nowe. Wystarczy wpisać w odpowiednie pola adres pocztowy podany podczas Twojej rejestracji na portalu i datę swoich urodzin';
break;
}
$smarty->assign('site_title', $site_title);
$smarty->assign('site_keywords', $site_keywords);
$smarty->assign('site_description', $site_description);
//
include('/header.php');
include('/footer.php');
//logout
if($_GET['action']=="logout"){
if(session_check()==1){
session_finish();
}
else{
}
}
// recover
elseif($_GET['action']=="recover"){
must_logout();
// recover post
if(isset($_POST['recover'])){ if(!(preg_match('/^[a-z0-9._-]+@[a-z0-9.-]+.[a-z]{2,6}$/i', sqlesc
($_POST['email'])))){ // zły email $error='Wpisz poprawny adres E-mail.';
}
else{ // email OK - sprawdzenie w bazie
$birth=sqlesc($_POST['b_year']).'-'.sqlesc($_POST['b_month']).'-'.sqlesc($_POST['b_day']);
$sql=$db->query("SELECT `id`,`email` FROM `users` WHERE `email`='".sqlesc
($_POST['email'])."' AND `birth`='".$birth."'") or
die($db->error); if($sql->num_rows==1){
$host=$_SERVER['REMOTE_HOST'];
$ip=IP_check();
$pass=gen_rec_pass();
$hash_pass=hashpass($pass);
$arr=$sql->fetch_assoc();
$to=$arr['email'];
$title="Odzyskanie hasła na portalu atotam.pl";
$head = "MIME-Versio: 1.0\n";
$head .= "Content-ty: text/plain; charset=utf-8\n";
$head .= "Fro: Portal geograficzny atotam.pl <info@atotam.pl>\n";
$content='Witaj.
Odpowiadamy na Twoją prośbę o odzyskanie hasła do konta na portalu Atotam.pl.
Została ona wysłana z komputera o : '.$ip.' ('.$host.').
Twoje nowe hasło to: '.$pass.'
Po zalogowaniu się na swoje konto za jego pomocą możesz je zmienić według swojego uznania.
Pozdrawiamy,
Administracja Atotam.pl';
if(mail($to,$title,$content,$head)){ //$db->query("UPDATE `users` SET `pass`='".sqlesc($hash_pass)."' WHERE `id`='".sqlesc($arr['id'])."'") or die($db->error);
$_SESSION['rec_info']=1;
}
else{
$_SESSION['rec_info']=2;
}
}
elseif($sql->numrows!=1){
$error='Wpisane dane są niepoprawne.';
}
}
$smarty->assign('error', $error);
}
// recover post -END
}
$smarty->display('login.tpl');
unset($_SESSION['rec_info']); ?>
Ten post edytował robos85 8.09.2008, 14:33:30