Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не передаются переменные сессии
 
 автор: dim   (15.08.2006 в 13:54)   письмо автору
 
 

Есть четыре файла:
Один с паролем:
passw.php
<? die ?>
admin
password

Главный файл:
index.php
<?
//  Определяем переменную var
define("var",1);

// Подключаем second.php
include "second.php";

// Подключаем main.php
include "main.php";
?>

Файл для ввода логина и пароля:
second.php
<?
// Ограничиваем от прямого доступа к файлу - возможен просмотр только через index.php
if (!defined("var")) die;
// Начинаем сессию
session_start();
$access=array();
$access=file("passw.php");

$login=trim($access[1]);
$passw=trim($access[2]);
// Проверяем были ли посланы данные
if(!empty($_POST['enter']))  
{
 
$_SESSION['login'] = $_POST['login'];  
 
$_SESSION['passw'] = $_POST['passw'];  
}  
// Если ввода не было, или они не верны  
// просим их ввести  
if(empty($_SESSION['login']) or  
   
$login != $_SESSION['login'] or  
   
$passw != $_SESSION['passw'])  
{
?>
     <form action=index.php method=post>  
     Логин <input class=input name=login value="">  
     Пароль <input class=input name=passw value="">  
     <input type=hidden name=enter value=yes>  
     <input class=button type=submit value="Вход">  
<?
 
die;
}
?>

и файл со ссылкой
main.php
<?
if (!defined("var")) die;
echo 
"Это файл main.php <br> ";
$start=10;
echo 
"<p><A href=index.php>index.php</a>&nbsp;"
?>

так вот если ввести правильно пароль и логин на index.php, попадаешь на main.php, а потом перейдя по ссылке на main.php попадаешь опять на форму авторизации...Причем выводом echo я проверил, что переменные сессии $_SESSION['login'] и $_SESSION['passw'] неопределены на странице index.php, на которую мы перешли:

Notice: Undefined index: login in w:\home\test1.ru\index.php on line 25

и то же сообщение для passw...

   
 
 автор: ec_stasis   (15.08.2006 в 14:32)   письмо автору
 
   для: dim   (15.08.2006 в 13:54)
 

А еще какие-то ошибки выводит?

   
 
 автор: dim   (15.08.2006 в 14:48)   письмо автору
 
   для: ec_stasis   (15.08.2006 в 14:32)
 

нет, не выводит
причем выводит Notice, когда я вывожу переменные сессии

   
 
 автор: Lelik   (15.08.2006 в 14:54)   письмо автору
 
   для: dim   (15.08.2006 в 14:48)
 

в начале кажого файла необходимо запустить сессию, чтоб сессионные переменные были определены

<?php
session_start
();
?>

   
 
 автор: dim   (15.08.2006 в 14:59)   письмо автору
 
   для: Lelik   (15.08.2006 в 14:54)
 

запуск сессии производится в начале каждого файла включением
include second.php

   
 
 автор: Vados   (15.08.2006 в 16:24)   письмо автору
 
   для: dim   (15.08.2006 в 14:59)
 

Привет!
Так у тебя же файл second.php используется и для ввода логина и пароля и для проверки всего остального, делай это просто один раз. То есть после введения логина и пароля на след. странице в заголовок или include (как пожелаешь) передавай эти переменные, к примеру вот так:

include 'config.php';
session_start();
$login = $_SESSION['login'];
$pass = $_SESSION['passw'];
// проверяем логин и пароль из переменных сессии на наличие в базе данных
$res = mysql_query('SELECT * FROM USERS WHERE login="'.$login.'" and pass="'.$passw.'"');
$num = mysql_num_rows($res);
if ($num == 0)
 {
  echo "<b class=text>";    
  echo 'Ошибка авторизации!';
  echo "</b>";
//можно отправить на стартовую страницу используя header(""); 
 exit;
  }

   
 
 автор: dim   (15.08.2006 в 21:00)   письмо автору
 
   для: Vados   (15.08.2006 в 16:24)
 

Привет!
Вообще-то идея была защитить доступ к папке администрирования методами php, тем более не слишком оправдано использование базы данных, потому только, что администроторов может быть всего несколько человек, а ради этого создавать таблицу, потом осуществлять к ней запросы.. ПУМ!..
а обращение просходит всегда к одному и тому же файлу - index.php, где, передавая некоторый параметр мы просто выбираем действие - загружаем нужный файл, предварительно проверив админ или нет этот чел.
$var=$_GET['var'];
switch (var)
{
    case 'main': include "main.php"; break;
    case 'del' : include "delpost.php"; break;
    ...
    default: include "main.php";
}

просто я решил, что лучше локализовать случай, легче ошибку или недочет будет найти, однако вот ответа все нет..((

   
 
 автор: cheops   (16.08.2006 в 12:45)   письмо автору
 
   для: dim   (15.08.2006 в 13:54)
 

У вас cookie включены в браузере? Вообще в чём проблема - не работают сессии или вам просто нужно подавить вывод Notice?

   
 
 автор: dim   (16.08.2006 в 17:46)   письмо автору
 
   для: cheops   (16.08.2006 в 12:45)
 

Не работают сессии((, а про подавление собачкой я знаю!!)
Куки включены. И еще одно уточнение, хотя может не слишком важное: отлаживаю и проверяю все скрипты на Денвере.

   
 
 автор: cheops   (16.08.2006 в 22:44)   письмо автору
 
   для: dim   (16.08.2006 в 17:46)
 

Дамп массива $_SESSION выводили - в нём что-то есть или он полностью пустой?
<?php
  
echo "<pre>";
  
print_r($_SESSION);
  echo 
"</pre>";
?>

   
 
 автор: dim   (17.08.2006 в 16:38)   письмо автору
 
   для: cheops   (16.08.2006 в 22:44)
 

Да, выводил. На последнем этапе (о котором я говорил - переход по ссылке) дамп абсолютно пуст..
Я прикрепил эти небольшие файлы (1Кб) - посмотрите, может найдете ошибку?..

   
 
 автор: cheops   (17.08.2006 в 22:17)   письмо автору
 
   для: dim   (17.08.2006 в 16:38)
 

У меня скрипт работает - где дело происходит на локальной машине или на сервере хостинга? Если на локальной машине посмотрите значение директивы session.save_path в конфигурационном файле php.ini (С:/Windows/php.ini) - что в ней? Указанный путь существует?

   
 
 автор: dim   (18.08.2006 в 00:46)   письмо автору
 
   для: cheops   (17.08.2006 в 22:17)
 

Cheops, все события развиваются на локальной машине. Денвер.
php.ini лежит по адресу: 'disk':\user\local\php5\php.ini (виртуальный 'disk' - настоящий путь - c:\WebServers\user\..)
Значение директивы: session.save_path = "/tmp"
p.s. .. и еще я заметил, что в папке, где находится заглушка sendmail при каждом обращении к сессиям создается файл с диковинным названием типа sess_3c03ccfcc6e6226f5d7b9df7bf338d1d, содержание которого дает понять, что именно этот файл несет информацию о переменных сессии. пример контента файла: login|s:5:"admin";passw|s:5:"passw"; (при этом в скрипте создается переменная login со значением admin и passw - со значением passw)
да, похоже, что /tmp и есть та директория, на которуюуказывает session.save_path

   
 
 автор: cheops   (18.08.2006 в 12:14)   письмо автору
 
   для: dim   (18.08.2006 в 00:46)
 

Тогда бы должно всё работать... а версия денвера какая? нет возможности попробовать другую?

   
 
 автор: dim   (21.08.2006 в 19:54)   письмо автору
 
   для: cheops   (18.08.2006 в 12:14)
 

Версия Base_PHP5_2005-07-19_a1.3.31_p5.0.4_m4.1.8_pma2.6.1.exe, но мне кажется, что не в версии дело..
тем более вряд ли Котеров допустил бы такой баг как глюк с сессиями!!
да и еще: при каждом переходе на новую страницу создается новый файл с переменными сессии. При последнем переходе (по ссылке) файл пуст

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования