Про .htaccess напишу ок. про авторизацию тоже. а чтобы сессии работали надо перед работой с ними их инициализаровать
1 2
<?php session_start();?>
и только потом можно с ними работать. другими словами если вы хотите повсемесно работать с сессией то вам надо в начале каждого файла ее инициализаровать как написанно выше. А еще лучше делать это в одном файле а его везде подключать
Ну это понятно, просто, я думал, что в в сессиях при их использовании, можно закрыть доступ на страницу не прошедшему авторизацию.
Я это представляю себе примерно так: Обработка
1 2 3 4 5 6 7 8 9 10 11
<?php <?php
session_start();
// Описание переменных пропускаем
if ($_POST['password'] == $password && $_POST['login'] == $login) // проверяем логины и пароли
$_SESSION['id'] = 1; // устанавливаем ключ ID для сессии авторизованного
header("Location: ../main.php"); // отправляем на закрытую страницу
else
$_SESSION['id'] = 0; // устанавливаем ключ ID для сессии неавторизованного
header("Location: ../index.php"); // отправляем обратно на авторизацию?>
в нужном файле:
1 2 3 4 5 6 7
<?php session_start();
if ($_SESSION['id'] = 1) // проверяем сессию (вот думаю, стоит ли приписывать isset?)
{ } // просто показываем содержимое страницы, так как юзер получил правильный ключ
else
{
header("Location: ../index.php"); // Отправляем на авторизацию
}?>
ты выше говорил о том что будешь брать данные о юзерах из базы вот и бери их оттуда. Если нашлись данные с такой парой логин/пароль то все данные этого юзера и пихай в сессию.
1 2 3 4 5 6
<?php if ($q = mysql_query("SELCT * FROM users WHERE pass=$_POST['pass'] AND login=$_POST['login'] LIMIT 1")) // проверяем логины и пароли
$_SESSION['user'] = mysql_result($q, 0); // устанавливаем ключ ID для сессии авторизованного
header("Location: ../main.php"); // отправляем на закрытую страницу
else
unset($_SESSION['user']);
header("Location: ../index.php"); // отправляем обратно на авторизацию?>
а дальше на других страницах
1 2 3 4 5 6 7
<?php session_start();
if (!empty($_SESSION['user']['id'])) // проверяем сессию (вот думаю, стоит ли приписывать isset?)
{ } // просто показываем содержимое страницы, так как юзер получил правильный ключ
else
{
header("Location: ../index.php"); // Отправляем на авторизацию
}?>
ну таког плана. это я утрированно все пишу, чисто чтобы смысл передать.
Добавлено 2010.10.06 15-03
естественно все что пришло от юзера перед запросом квоть, а то туда могут все что угодно написать и если без проверки пихать все в запрос это будет угроза безопасности
И вот ещё спросить хотел, как прикрутить сюда ещё проверку группы и верное отображение прав для групп
1 2 3 4 5 6
<?php if ($q = mysql_query("SELCT * FROM users WHERE pass=$_POST['pass'] AND login=$_POST['login'] LIMIT 1"))
$_SESSION['user'] = mysql_result($q, 0);
header("Location: ../main.php");
else
unset($_SESSION['user']);
header("Location: ../index.php");?>
Если по русски, то идея такова:
Есть 100% не пустые поля в таблице юзеры:
id login password mail group
group может быть равен 0(юзер), 1(модератор), 2(админ) или 3(гл. админ) и назначается непосредственно мною(админом)
Вот мы увидели и нашли логин и пароль, теперь мы должни взять эту строку и сделать так:
Выбрать из строки, где логин и пароль равны найденному поле group
Если group == 0, то вернуть на главную (там уже с джавой попробую разобраться и вывести ему меседж, что у вас нет прав, просматривать админ-панель)
потом 2 варианта, elseif или просто новый if. Выбираю новый if
если group == 1 то присвоить $_SESSION['group'] = 1 переместить на нужную страницу, на странице каждая ссылка на модуль, должна будет быть с
1 2 3
<?php if ($_SESSION['group'] = 1 or $_SESSION['group'] = 2 or $_SESSION['group'] = 3) { echo "LINK"; } // для общедоступного
if ($_SESSION['group'] = 1 or $_SESSION['group'] = 2) { echo ""; } elseif ($_SESSION['group'] = 3) { echo "Link"; } // для только гл. админа
#Возможны другие вариации, ну это уже логично.?>
так? Но вот я хочу заделать эти все линки в шаблонные переменные, вставляемые не инклудом, а, к примеру, {menu}, от чего будет выводиться все линки.
Мысли в том направлении? Правильно, вообще, думаю? Получится ли таким способом?
ну если чисто цифрами будет поля group то можно и так проверять
1 2
<?php if ($_SESSION['user']['group'] < 2) header(); die();?>
заметь после вызова хеадер я вызываю die() это обязательно иначе будет серьезная угроза безопасности, так как хедер не всегда может отработать, это всего лишь заголовок.
то $_SESSION['user'] будет содержать всю инфу о юзере из бд, в том числе group
На счет шаблонов
1 2 3 4
<?php //это файл шаблона. в нем например метки типа {MARKET}
$templ = file_get_contents('template.html');
//теперь все метки будут замененны на значение переменной $market
$templ = str_replace('{MARKET}', $market, $templ);?>
<?php <?php
$templ = file_get_contents('template.html'); // можно про это подробней?
$templ = str_replace('{MARKET}', $market, $templ);?> // можно про это подробней??>
Первое - он достает контент из шаблона и инклудит в документ с данным скриптом? А php скрипты, тогда куда вставлять? К примеру, обработки сессий.
Второе - это функция, которая будет менять {MARKET} на значение переменной $market, а зачем тут ещё $templ?
[/b]