При заходе на стр2 сравнивать переданный хеш с тем что в сессии. Если не совпадает - редирект на стр1.
Вопрос: как это все представить в виде кода?
Пробывал так:
page1.php
<?php
session_start();
$time = md5(time());
$_SESSION['hash'] = $time;
?>
<a href="page2.php?hash=<?php echo $time; ?>">Link</a>
page2.php
<?php
session_start();
if ($_GET['hash'] !== $_SESSION['hash']) {
header('Location: page1.php');
exit;
}
?>
Не работает. Подскажите в чем загвоздка. Спасибо.
Спустя 10 минут, 33 секунды (23.08.2011 - 12:18) linker написал(а):
А зачем такие извраты? Просто на page1.php и page2.php $_SESSION['hash'] будет одинаковым, поэтому какой смысл передавать хэш, да ещё потом и сравнивать.
Спустя 11 минут, 51 секунда (23.08.2011 - 12:30) tavrik83 написал(а):
Цитата (linker @ 23.08.2011 - 09:18) |
А зачем такие извраты? Просто на page1.php и page2.php $_SESSION['hash'] будет одинаковым, поэтому какой смысл передавать хэш, да ещё потом и сравнивать. |
Это для того, чтобы на страницу 2 можно было попасть только через страницу 1. Поправьте, если я не прав.
Спустя 4 минуты, 29 секунд (23.08.2011 - 12:34) linker написал(а):
Ты не прав
page1.php
page1.php
<?phppage2.php
session_start();
$_SESSION['hash'] = md5(time());
?>
<a href="page2.php">Link</a>
<?php
session_start();
if (!isset($_SESSION['hash']))
{
header('Location: page1.php');
exit;
}
?>
Спустя 1 минута, 29 секунд (23.08.2011 - 12:36) neadekvat написал(а):
Цитата (tavrik83 @ 23.08.2011 - 13:07) |
$time = md5(time()); |
Лучше назвать перемнную $hash, ибо путает.
А по задаче - может, просто на странице 1 писать в сессию условную переменную, что пользователь был на этой странице, а на 2 просто проверять наличие этой условной переменной.
Бу, Линкер опередил.
Спустя 18 минут, 1 секунда (23.08.2011 - 12:54) tavrik83 написал(а):
Толи лыжи не едут, толи я...
1. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\xampp\htdocs\test2\index.php:8) in C:\Program Files\xampp\htdocs\test2\index.php on line 9
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\xampp\htdocs\test2\index.php:8) in C:\Program Files\xampp\htdocs\test2\index.php on line 9
2. Когда захожу сразу на index2.php - не редиректится на index.php
1. Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\xampp\htdocs\test2\index.php:8) in C:\Program Files\xampp\htdocs\test2\index.php on line 9
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\xampp\htdocs\test2\index.php:8) in C:\Program Files\xampp\htdocs\test2\index.php on line 9
2. Когда захожу сразу на index2.php - не редиректится на index.php
Спустя 3 минуты, 48 секунд (23.08.2011 - 12:57) neadekvat написал(а):
http://phpforum.ru/index.php?showtopic=43337
вопросы 3, 4
вопросы 3, 4
Спустя 9 минут, 26 секунд (23.08.2011 - 13:07) tavrik83 написал(а):
Цитата (neadekvat @ 23.08.2011 - 09:57) |
http://phpforum.ru/index.php?showtopic=43337 вопросы 3, 4 |
Спасибо. А как быть с редиректом?
Спустя 3 минуты, 44 секунды (23.08.2011 - 13:11) neadekvat написал(а):
Цитата (tavrik83 @ 23.08.2011 - 14:07) |
Спасибо. А как быть с редиректом? |
Если ошибки нет - значит, в сессии уже есть hash.
Спустя 15 минут, 30 секунд (23.08.2011 - 13:26) tavrik83 написал(а):
Вот ссылка (index2.php) . Если вы впервые пройдете по ней, вы должны быть переправлены на эту(index.php) страницу, а уже с нее (и только с нее) можно будет попасть на index2.php.
Вот так как-то...
Вопрос: как это сделать
ЗЫ: кодировку поменял, ошибки нет
Вот так как-то...
Вопрос: как это сделать
ЗЫ: кодировку поменял, ошибки нет
Спустя 3 минуты, 56 секунд (23.08.2011 - 13:30) neadekvat написал(а):
Как полностью выглядит код index2.php?
Спустя 4 минуты, 57 секунд (23.08.2011 - 13:35) tavrik83 написал(а):
Пока так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
session_start();
if (!isset($_SESSION['hash']))
{
header('Location: index.php');
exit;
}
?>
</body>
</html>
Спустя 3 минуты, 57 секунд (23.08.2011 - 13:39) neadekvat написал(а):
А теперь еще раз пройди по ссылке, что я дал и перечитай. Обрати внимание на слова о том, что ничего не должно выводится в поток до header.
И включи у себя отображение всех ошибок - warning должен появляться в этом случаи.
И включи у себя отображение всех ошибок - warning должен появляться в этом случаи.
Спустя 23 минуты, 13 секунд (23.08.2011 - 14:02) inpost написал(а):
tavrik83
Тебе же уже ответили выше... header выше всего...
Тебе же уже ответили выше... header выше всего...
Спустя 20 минут, 4 секунды (23.08.2011 - 14:22) tavrik83 написал(а):
Заработало. Всем огромное спасибо.