[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сессии PHP?
tavrik83
К ссылке на стр1 добавлять параметр с уникальным хешкодом и сохранять его в сесии. (При каждом заходе на стр1 разный хеш. Например md5(time()) )
При заходе на стр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
<?php 
session_start();
$_SESSION['hash'] = md5(time());
?>
<a href="page2.php">Link</a>
page2.php
<?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

Спустя 3 минуты, 48 секунд (23.08.2011 - 12:57) neadekvat написал(а):

Спустя 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 должен появляться в этом случаи.

Спустя 23 минуты, 13 секунд (23.08.2011 - 14:02) inpost написал(а):
tavrik83
Тебе же уже ответили выше... header выше всего...

Спустя 20 минут, 4 секунды (23.08.2011 - 14:22) tavrik83 написал(а):
Заработало. Всем огромное спасибо.
Быстрый ответ:

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