[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессии
ANG3
Вот решил защитить свой скрипт от F5 рефреша. Начал изучать сессии.
Не работает. Посмотрите код пожалуйста.

Форма со скрытым полем.

PHP
[/html]<form method='POST' action='zakazpro.php'>[html]
<?
php
session_start
();
$secret=$_SESSION["secret"] = "1";
echo 
"<input name=\"secret\" type=\"hidden\" [VALUE=\"".$secret."\"]/>";

<?php
include('mysql.php')
?>

<?php  
session_start
();
if (isset([
$_POST['secret'])) {
session_destroy();

$name mysql_real_escape_string(trim(strip_tags($_POST['name'])));
$inn mysql_real_escape_string(trim(strip_tags($_POST['inn'])));
$address mysql_real_escape_string(trim(strip_tags($_POST['address'])));
$tel mysql_real_escape_string(trim(strip_tags($_POST['tel'])));
$email mysql_real_escape_string(trim(strip_tags($_POST['email'])));
$order mysql_real_escape_string(trim(strip_tags($_POST['order'])));
$date=date ('d.m.Y',mktime ());

if( 
strlen($name)<|| strlen($inn)<|| strlen($address)<|| strlen($tel)<|| strlen($email)<|| strlen($order) <
{
exit(
"<p style='color: #FFFFFF; font-family: Verdana; font-size: 10pt'>Заполнены не все поля, или их содержимое слишком мало!</p>"); 
}
else
     {
$query="INSERT INTO `order` ( `order` , `name` , `email` , `tel` , `address` , `inn` , `date` ) 
VALUES (
'$order', '$name', '$email', '$tel', '$address', '$inn', '$date'
);
"
;
mysql_query ("SET NAMES `cp1251`");
mysql_query ($query) or die(mysql_error());

mysql_free_result(); 

mysql_close();

echo
"<p align='justify' style='color: #FFFFFF; font-family: Verdana; font-size: 10pt'>Спасибо! Ваша заявка принята.</p>"//header ("Location: zakaz.php");  - не работает.
      
}
      }
else {
exit (); 
}
      




Спустя 1 минута, 42 секунды (1.08.2009 - 21:48) ANG3 написал(а):
С
PHP
<?php include('mysql.php'
начинается новая страница. Запостил неправильно.

Спустя 52 минуты, 15 секунд (1.08.2009 - 22:40) Raito-kun написал(а):
очень тяжело это читать.
во-первых: почему
Код
[VALUE=\"".$secret."\"]

в квадратных скобках?
далее:
PHP
if (isset([$_POST['secret']))

что здесь делает лишняя квадратная скобка isset([???
далее:
зачем здесь сессии, когда вы присваиваете $secret = "1", потом это значение вставляете в форму в хидден, потом проверяете if isset($_POST['secret']). это условие будет истинно в любом случае после отправки формы.

Спустя 9 минут, 51 секунда (1.08.2009 - 22:50) ANG3 написал(а):
Цитата
в квадратных скобках?
далее: PHP
if (isset([$_POST['secret']))

что здесь делает лишняя квадратная скобка isset([???


Это я эксперементировал, не убрал потом остатки.

Моя задумка такая: вместе с отправкой формы юзер отправляет и значение сессии. Скрипт это всё получает, происходит условие, если значение из сессии получено, то очищаются данные из сессии и выполняется скрипт. Если злоумышленник жмёт F5, условие не выполняется, так как нету данных в сессии и скрипт не выполняется.

Спустя 59 минут, 42 секунды (1.08.2009 - 23:49) ANG3 написал(а):
Помогите разобраться с сессиями

Спустя 1 минута, 51 секунда (1.08.2009 - 23:51) ApuktaChehov написал(а):
Что то ты тут намудрил страшно, я ничего не понял wink.gif

Вообщем смысл очень простой.
Тебе можно даже ничего, никуда не отправлять.

К примеру, пусть будет контрольной - переменная $_SESSION['protect'].
При первом запуске она не сущесвтвует. Скрипт проверяет это и выполняется. И создает ее - $_SESSION['protect']=true.
Если нажать F5 эта переменная уже будеть существовать и скрипт, проверив это, ничего не сделает. Вот.

P.S. Что ж ты так тему назвал? Написал сессия, в вопрос о защите от F5 unsure.gif

Спустя 9 минут, 5 секунд (2.08.2009 - 00:00) Krevedko написал(а):
А я сделал, как мне ув. Твин посоветовал.
Одна лишь строчка
PHP
header("location: ".$_SERVER['PHP_SELF']."?mod=guest&page=show&a=".rand(100,1));


И работает главное

Спустя 4 минуты, 58 секунд (2.08.2009 - 00:05) ApuktaChehov написал(а):
Здорово... Переадресовать на ту же страницу.
Да так лучше...

Спустя 37 минут, 10 секунд (2.08.2009 - 00:42) ANG3 написал(а):
Не могу понять почему, но даже когда я весь код удалил и оставил только простой редирект. Ничего не происходит. Этот же редирект стоит на другой странице, там работает.

PHP
header ("Location: zakaz.php");

[

quote]К примеру, пусть будет контрольной - переменная $_SESSION['protect'].
При первом запуске она не сущесвтвует. Скрипт проверяет это и выполняется. И создает ее - $_SESSION['protect']=true.
Если нажать F5 эта переменная уже будеть существовать и скрипт, проверив это, ничего не сделает. Вот.

P.S. Что ж ты так тему назвал? Написал сессия, в вопрос о защите от F5 [/quote]


Очень хочу разобраться с сессиями! Как сделать чтобы переменная не существовала при первом запуске?

Спустя 7 минут, 51 секунда (2.08.2009 - 00:50) Krevedko написал(а):
так тебе все таки сессиями хочется или через хидер ?
через хидер просто..ставишь сразу после
query("INSERT INTO ....

Спустя 14 минут, 20 секунд (2.08.2009 - 01:05) ANG3 написал(а):
Через header вообще не работает, убирал весь код, оставлял только редирект.
Всё тоже самое. А сессии мне вообще интересны.

Да и как альтернатива сойдёт.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.