|
|
|
| Есть четыре файла:
Один с паролем:
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> "
?>
|
так вот если ввести правильно пароль и логин на 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... | |
|
|
|
|
|
|
|
для: dim
(15.08.2006 в 13:54)
| | А еще какие-то ошибки выводит? | |
|
|
|
|
|
|
|
для: ec_stasis
(15.08.2006 в 14:32)
| | нет, не выводит
причем выводит Notice, когда я вывожу переменные сессии | |
|
|
|
|
|
|
|
для: dim
(15.08.2006 в 14:48)
| | в начале кажого файла необходимо запустить сессию, чтоб сессионные переменные были определены
<?php
session_start();
?>
|
| |
|
|
|
|
|
|
|
для: Lelik
(15.08.2006 в 14:54)
| | запуск сессии производится в начале каждого файла включением | |
|
|
|
|
|
|
|
для: 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;
}
|
| |
|
|
|
|
|
|
|
для: 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";
}
|
просто я решил, что лучше локализовать случай, легче ошибку или недочет будет найти, однако вот ответа все нет..(( | |
|
|
|
|
|
|
|
для: dim
(15.08.2006 в 13:54)
| | У вас cookie включены в браузере? Вообще в чём проблема - не работают сессии или вам просто нужно подавить вывод Notice? | |
|
|
|
|
|
|
|
для: cheops
(16.08.2006 в 12:45)
| | Не работают сессии((, а про подавление собачкой я знаю!!)
Куки включены. И еще одно уточнение, хотя может не слишком важное: отлаживаю и проверяю все скрипты на Денвере. | |
|
|
|
|
|
|
|
для: dim
(16.08.2006 в 17:46)
| | Дамп массива $_SESSION выводили - в нём что-то есть или он полностью пустой?
<?php
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(16.08.2006 в 22:44)
| | Да, выводил. На последнем этапе (о котором я говорил - переход по ссылке) дамп абсолютно пуст..
Я прикрепил эти небольшие файлы (1Кб) - посмотрите, может найдете ошибку?.. | |
|
|
|
|
|
|
|
для: dim
(17.08.2006 в 16:38)
| | У меня скрипт работает - где дело происходит на локальной машине или на сервере хостинга? Если на локальной машине посмотрите значение директивы session.save_path в конфигурационном файле php.ini (С:/Windows/php.ini) - что в ней? Указанный путь существует? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: dim
(18.08.2006 в 00:46)
| | Тогда бы должно всё работать... а версия денвера какая? нет возможности попробовать другую? | |
|
|
|
|
|
|
|
для: cheops
(18.08.2006 в 12:14)
| | Версия Base_PHP5_2005-07-19_a1.3.31_p5.0.4_m4.1.8_pma2.6.1.exe, но мне кажется, что не в версии дело..
тем более вряд ли Котеров допустил бы такой баг как глюк с сессиями!!
да и еще: при каждом переходе на новую страницу создается новый файл с переменными сессии. При последнем переходе (по ссылке) файл пуст | |
|
|
|