Вы когда нибудь сталкивались с ситуацией, когда Вам надо передать значение из одного скрипта в другой? Вот именно для этого и служит сессии. Многие начинающие программисты при знакомстве с сессиями начинают срать кирпичами, но не огорчайтесь - тут нет ничего сложного, держитесь меня и я Вас научу.
Как обычно, сразу код, а в нем комменты...
Файл page1.php
1 2 3 4 5 6 7 8 9 10
<?php <?php
//стартуем сессию, это необходимо дл того что бы пользоваться сессиями
session_start();
//теперь нам доступен массив сессии и мы можем заносить в нее данные
//например тут я присвоил ключу "id" значение 777
$_SESSION['id'] = 777;
?>
echo '
<!-- это ссылка на ворую страницу -->
<a href="page2.php">Page 2</a>';?>
Файл page2.php
1 2 3 4
<?php //стартуем сессию, это необходимо дл того что бы пользоваться сессиями
session_start();
//выводим переменную, которую обьявили на другой странице.
echo $_SESSION['id'];?>
Как видите, мы объявили переменую на одной странице, а воспользовались на другой.
На самом деле вы можете передавать переменные таким образом на любое кол-во страниц, главное что бы перед использованием сессии вы всегда ее стартовали при помощи функции session_start(). Вот самый простой пример, думаю дальше Вы сами придумаете как воспользоваться этим приколом. Сессии в основном юзаються для авторизации на сайтах
<?php if (!empty($_SESSION['user'])) // проверяем сессию (вот думаю, стоит ли приписывать isset?)
{ } // просто показываем содержимое страницы, так как юзер получил правильный ключ
else
{
echo "Пройдите авторизацию: <a href=\"index.php\"> Авторизация </a>"; // Отправляем на авторизацию
exit();
}?>
Но даже при верном логине и пароле пишет отправление на авторизацию
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
<?php <?php
error_reporting(E_ALL);
include ('mysql_conf.php');
//var_dump($users_tb);
$q = mysql_query("SELECT * FROM `". $users_tb ."` WHERE `password`='".$_POST['password'] ."' AND `login`='".$_POST['login'] ."' LIMIT 1 ");
if (mysql_num_rows($q) > 0) {
$result = mysql_fetch_array($q);
$_SESSION['user'] = 1;
header("Location: ../main.php");
die();
}
else {
unset($_SESSION['user']);
echo "Такие пара логина и пароля найдены не были <br/> <a href=\"../index.php\"> На авторизацию </a>";
// отправляем обратно на авторизацию
die();
}?>
например вместо хидеров поставь там какоето echo и посмотри доходит ли туда выполнение. Так как по какимто причинам может не доходить. например запрос не выполняется или таких логина и пароля в базе всеже нет(ты сказал что есть так что отпадает), мало ли, причины могут быть разными.
Вообще важно понять что все пишут код с багами. нет программиста без багов. Программист пишущий без багов это программист не пишущий вообще. Большая часть потраченого времени любого программиста это не время на написание а время на отладку. По-этому очень важно научиться ее делать.
если что-то не работает, проверяй логические узлы. Проверяй куда доходит выполнение а куда нет и так далее, пока не найдешь причину.
1 2
<?php var_dump(переменная);?>
еще очень важно чтобы в самом начале выполнения скриптов было прописано
1 2
<?php error_reporting(E_ALL);?>
вар дамп все выводит в одну строку и это не удобно разбирать глазами, я например делаю так
<?php <?php
function pr($data) {
echo '<pre>';
print_r($data);
echo '</pre>';
}
error_reporting(E_ALL);
include ('mysql_conf.php');
//var_dump($users_tb);
$q = mysql_query("SELECT * FROM `". $users_tb ."` WHERE `password`='".$_POST['password'] ."' AND `login`='".$_POST['login'] ."' LIMIT 1 ");
if (mysql_num_rows($q) > 0) {
$result = mysql_fetch_array($q);
pr($result);
$_SESSION['user'] = 1;
// header("Location: ../main.php");
echo "проходит";
die();
}
else {
unset($_SESSION['user']);
echo "Такие пара логина и пароля найдены не были <br/> <a href=\"../index.php\"> На авторизацию </a>";
// отправляем обратно на авторизацию
die();
}?>
Судя по всему, ошибка в проверке авторизации в закрытом файле:
1 2 3 4 5 6 7 8 9
<?php if (!empty($_SESSION['user'])) // проверяем сессию
{ } // просто показываем содержимое страницы, так как юзер получил правильный ключ
else
{
echo "Пройдите авторизацию: <a href=\"index.php\"> Авторизация </a>"; // Отправляем на авторизацию
exit();
}
?>?>
Если юзер авторизован, то $_SESSION['user'] принимает значение 1, при проверке мы делаем: Если $_SESSION['user'] не пустое, то пропустить. В ином случае echo с отправкой на авторизацию
Добавлено 2010.10.11 12-45
Если ставить так:
1 2 3 4 5 6 7
<?php if ($_SESSION['user']=1) // проверяем сессию (вот думаю, стоит ли приписывать isset?)
{ } // просто показываем содержимое страницы, так как юзер получил правильный ключ
else
{
echo "Пройдите авторизацию: <a href=\"index.php\"> Авторизация </a>"; // Отправляем на авторизацию
exit();
}?>
то даже если просто открывать страницу, прописывая в адресной строке, содержимое показывается