IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Помогите научиться делать серверные сайты (http://www.imho.ws/showthread.php?t=61932)

Hubbitus 23.05.2005 09:21

Цитата:

нак:
Мне сказали что это через чур замудрено.
Да фигня, нормально вполне.
Цитата:

нак:
А можно как то упростить его или заменить другим кодом?
Можно конечно. Всегда можно заменить что-то на код который будет делать то же самое :p В твоем случае можно просто написать:
PHP код:

if (is_file('_text/'.@$id.'.txt.php')) @include_once('_text/'.$id.'.txt.php');
else @include_once(
'_text/phones.txt.php'); 

Только по большому счету разницы никакой, ну меньтше кода на 5 байт...

Raman 23.05.2005 13:40

Судя по тому, что я видел, переменная $id нигде у вас не проверяется на валидность... Настоятельно рекомендую сделать проверку на alphanumerical (функция ctype_alnum($id) возвращает TRUE если буквы/цифры, FALSE - в противном случае) и отсечь все лишнее ПЕРЕД тем как делать include/require! Иначе можно много нехороших вещей сделать, например прочитать любой (с некоторыми условиями) файл.

нак 23.05.2005 13:54

Почему используется $id. Когда страницы открываются прописываеш ?id=service

Hubbitus 23.05.2005 15:58

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

Raman 23.05.2005 15:58

Я не спрашивал почему используется $id, хоть $page, хоть что угодно.
Но если будет, например, "?id=../index.php" то index.php свой код и покажет...
Это в случае отсутствия проверки.

А если копнуть глубже?.. (типа etc/passwd и т.д.)

Hubbitus 23.05.2005 17:01

Цитата:

Raman:
Но если будет, например, "?id=../index.php" то index.php свой код и покажет...
Уверен? 2+2 в уме не сложить? Займемся арифметикой вместе???
$id = '../index.php';
$file = '_text/'.$id.'.txt.php';
По твоему теперь $file содержит путь на самого себя???? Помоему так на index.txt.php которого нету, поскольку все подобные файлы лежат в /_text/ !!!!!!!!!!

Я НЕ спорил сразу что чисто теоретически это потенциальная дырка, но не особенно уж страшная, как я подчеркивал, в свете дописывания постоянных частей в пути.

Raman 23.05.2005 22:54

Извиняюсь за пример c index.php... Но важность дыры от этого не меняется.

Во-первых, кто даст гарантию на то, что на сервере больше нет txt.php файлов?

Во-вторых, человек может захотеть использовать аналогичные расширения для include файлов - и это частое явление - а если их взять и просмотреть?

Понятно, что "хакеру" придется брутфорсить имена, но по словарю с правилами это не так сложно и не так долго. Да и сам владелец сайта может неявно помочь.

В-третьих, если человек, не дай бог, сделает fixed part как .php или .txt ?

Надо культуру программирования прививать смолоду - а из таких "мелочей" складываются дырявые продукты. И масштаб здесь не важен.

Ничего личного! Просто хочется чтобы человек осознал что пара строчек кода может застраховать от некоторых неожиданностей. И легче их добавить.

нак 24.05.2005 12:13

Я смотрю затронул болезненый вопрос.
Тогда подскажите как, куда и какую защиту я должен поставить в файлах index.php phones.text.php и остальных. чтобы не взломали сайт? Хоть и у меня обычный сайт. там нечего и смотреть то. Но все же.

Raman 24.05.2005 13:21

В index.php достаточно явно задать $id и сделать базовую проверку на ctype_alpnum:

Код:

$id=$_GET[id];
if (is_file('_text/'.@$id.'.txt.php') && ctype_alnum($id)) @include_once('_text/'.$id.'.txt.php');
else @include_once('_text/phones.txt.php');

Этого хватит с головой.
И взять за правило не размешать в директории _text файлов с расширением txt.php, чтение которых нежелательно.

нак 24.05.2005 13:39

Спасибо. Но у меня файлы в _text только те которые должны считать, больше ничего нет.
Да и я упростил сайт оставил в index.php только два includes_once В начале и в конце с сылкой на файл с мета тэгами и внизу на рекламу и все.

нак 03.06.2005 19:20

А скажите, как понять вот это добавление к index.php:
index.s.php?id=articles&loc=press_other/pts_gro.php? Если ясно, что id= относится к коду которое разбирали верху, а дальше куда идет сылка?

Hubbitus 04.06.2005 10:11

Цитата:

нак:
А скажите, как понять вот это добавление к index.php:
index.s.php?id=articles&loc=press_other/pts_gro.php? Если ясно, что id= относится к коду которое разбирали верху, а дальше куда идет сылка?
Гыг, дак это нужно у тебя спросить как ты обрабатываешь второй параметр loc в скрипте! Телепаты здесь видимо в отпуске - лето же!

нак 04.06.2005 12:39

Не я обрабатываю это, а у знакомого видел на его сайте Вот и спросил. Он мне дал коды с id=

Hubbitus 04.06.2005 15:47

Дак у него и нужно спросить что унего этот параметр значит! Ведь можно сколько угодно каких надо сделать!

нак 29.06.2005 21:27

Спасибо за инфу

нак 18.07.2005 10:00

Не нехочет сказать что за код обрабатывает это index.s.php?id=articles&loc=press_other/pts_gro.php. А мне очень нужно это чтобы файлы помещать по папкам а не в одну, чтобы потом не искать в куче.
Чтобы разные названия папок можно было делать.
Помогите пожалуйста?

Hubbitus 18.07.2005 12:25

Цитата:

нак:
А мне очень нужно это чтобы файлы помещать по папкам а не в одну, чтобы потом не искать в куче.
Дак помещай в разные директории, проблема-то в чем? Просто ставь правильные пути и все.
Цитата:

нак:
Помогите пожалуйста?
Ставь конкретный вопрос в чем сложность или что не получается - постараемся помочь.

нак 18.07.2005 16:52

Я и создаю директорию press_other в директории _txt и помещаю туда файл. Ставлю сылку в файле articles.txt.php index.s.php?id=articles&loc=press_other/pts_gro.php. Но все равно ответ как будто нет такой директорнии и файла. Остается та же страница

Оказывается там другой php код обрабатывает этото сценарий.

нак 18.07.2005 22:27

Мне не понятен код который обрабатывал как выше код index.s.php?id=articles И в добавок так что в корневой есть папка articles с папкой с файлом press_other/pts_gro.php. Вот и получается обращение index.s.php?id=articles&loc=press_other/pts_gro.php
И сколько id=*** столько и папок и в ней папок

нак 19.07.2005 10:58

Цитата:

Сообщение от Hubbitus
Дак помещай в разные директории, проблема-то в чем? Просто ставь правильные пути и все.

Я и помещаю в папки, а вот как в коде поставить путь к ним и файлам в них? Когда папок столько сколько и id=***

Hubbitus 20.07.2005 10:42

Слушай, нак, у тебя же следующий код обрабатывает все
PHP код:

if (isset($id)&&$id!=''&&is_file('_text/'.$id.'.txt.php')) 
@include_once(
'_text/'.$id.'.txt.php'); else  @include_once('_text/phones.txt.php'); 

? Ты вообще понимаешь что там написано и как работает??? Там же вообще никак не учитывается вторая переменная $loc и директория из которой нужно брать файлы тоже прописана жестко. Советую тебе разобраться нормально хотябы с этими 3 строчками!!!

Только сразу предостерегаю - не вздумай просто передавать параметром путь к файлу для включения напрямую - это даже в случае кучи проверок очень небезопастно - так делать НЕ надо. То на что ты пытаешься равняться - неверно.

нак 21.07.2005 10:53

А как дописать код, чтобы обрабатывал $loc для захода в папки с файлами?

Hubbitus 21.07.2005 18:24

Цитата:

нак:
А как дописать код, чтобы обрабатывал $loc для захода в папки с файлами?
Тогда так чтобы в нем передавался лишь идентификатор, по кторому потом можно будет определить директорию (из БД ли, из файла ли), и обязательно полюбому к этому дописывать еще постоянную часть пути - иначе это будут открытые ворота для злоумышленников, как и писалось выше.

Вообще не советую так делать.

нак 21.07.2005 18:34

Мне из файла нужно определять путь к директории. С базой я пока не научился пользоваться.

Hubbitus 13.09.2005 11:16

Цитата:

нак:
Мне из файла нужно определять путь к директории.
Тоесть еще и идентификатор директории передавать чтоли хочешь?
Цитата:

нак:
С базой я пока не научился пользоваться.
Зря.

Цитата:

нак:
Я и создаю директорию press_other в директории _txt и помещаю туда файл. Ставлю сылку в файле articles.txt.php index.s.php?id=articles&loc=press_other/pts_gro.php. Но все равно ответ как будто нет такой директорнии и файла. Остается та же страница
А вообще это может выглядеть приблизительно так:
это в конфиг куда-то:
Код:

$pathsDirs = array(
    'articles' => 'articles_dir',
    'news' => 'news_dir'
#.... и так далее
            );

$locationFiles = array(
    'pts_gro' => 'pts_gro.php',
    'other' => 'other_file.php'
#.... и так далее
                );

А это соответственно новая обработка переменных $id и $loc:
PHP код:

if (@$id and array_key_exists($id$pathsDirs) and @$loc and array_key_exists($loc$locationFiles) and is_file($pathsDirs[$id].'/'.$locationFiles[$loc]))
    include_once(
$pathsDirs[$id].'/'.$locationFiles[$loc]);
    else @include_once(
'_text/phones.txt.php');#Что-то поумолчанию 

Ну или что-то подобное. Как говорится "Истина где-то рядом" :) (почти нуародное уже)

нак 20.09.2005 18:55

Спасибо за код. У меня другой код работает, но и этот пойдет тоже.
И еще у меня другой вопрос:
Как мне написать код чтобы нижний файл с баннерами загружался с опозданием, после загрузки основной страницы не сылаясь на этот файл и торможение страницы.

Hubbitus 21.09.2005 11:13

Цитата:

нак:
Как мне написать код чтобы нижний файл с баннерами загружался с опозданием, после загрузки основной страницы не сылаясь на этот файл и торможение страницы.
Это можно будет сделать только на JavaScript - подгружать баннер нижний, когда страница уже загрузилась. Потому что сервер отдает страницу, и не знает когда там оно загрузилось, когда нет. Точнее можно конечно проверить что забрал/загрузил клиент уже, ожидая с выводом оставшейся части, но для одной страницы это будет неправильно делать - ведь страница будет не полной, поэтому может и интерпретироваться браузером не правильно. Да и геморно будет отслуживать и проверять для каждой страницы, скачались ли уже все связанные файлы (картинки например), если вообще это можно сделать точно (Помоему в Логах пишется только факт запроса чего-либо, но не результат отдачи, если прервана загрузка? Поправит кто-то?).

нак 21.09.2005 11:54

А как это написать, чтобы работало?

Hubbitus 22.09.2005 11:49

Цитата:

нак:
А как это написать, чтобы работало?
Просто на onload документа вешаете обработчик, и в нем, например в iframe, подгружаете нужный документ (меняете scr) с баннером. А первоначально там пустой документ пусть. Вот и все. Это если на JS, подругому даже думать лень, и связываться из-за такой мелочи с таким гемором...

нак 26.01.2007 16:24

Помогите мне доделать файл регистрации. Создал код заполнения формы по логину паролю и имя\отчество. Создал базу для прописки юзера.
Файл регистрации работает при отправке зарегистрированого пользователя в базу нормально. Все добавляется без проблем.
Потом решил добавить функцию проверки на свободность имя пользователя, чтобы если есть пользователь с таким именем то выдаст ошибку что есть такой пользователь и вернется обратно в форму. Вот на этом у меня заминка не могу нормально написать проверку. Помогите мне разобраться в этом.

Код формы регистрации с обработкой:

PHP код:

<?
include ("config.php");
$sm '<INPUT TYPE="button" VALUE="Вернуться" onClick="history.back()">';
if (
$_POST['sent']==1) {
$_POST['login'] = str_replace('~','',strip_tags(trim ($_POST['login'])));
$_POST['passw'] = str_replace('~','',strip_tags(trim ($_POST['passw'])));
$_POST['firstname'] = str_replace('~','',strip_tags(trim ($_POST['firstname'])));
if (!
$_POST['login']) { echo "<br>Пожалуйста введите логин<br>"; unset ($_POST['sent']); echo $sm; exit;}
if (!
$_POST['passw']) { echo "<br>Пожалуйста введите пароль<br>"; unset ($_POST['sent']); echo $sm; exit;}
if (!
$_POST['firstname']) { echo "<br>Пожалуйста введите имя и отчество<br>"; unset ($_POST['sent']); echo $sm; exit;}
if(
StrLen($_POST['passw'])<4) { echo "<br>Пароль должен содержать больше 4 символов</br>"; unset ($_POST['sent']); echo $sm; exit;}
//Выбор строк с таблицы с базы
$sql="select login from user where login = '$login'";
$result=mysql_query($sql,$db_conn);
// Проверка на свободность имя пользователя
if ($_POST['login']==$login)
{
$sql="insert into user (login, pass, firstname) values ('".$_POST[login]."','".$_POST[passw]."','".$_POST[firstname]."')";
$result=mysql_query($sql,$db_conn);
echo 
"Спасибо за регистрацию на сайте. Теперь Вы можете авторизоваться на сайте.<br>"
echo 
$sm;
}
else
{
echo 
"Извените но логин с таким именем $_POST[user]  уже существует в базе. Вернитесь обратно и выбирите другое имя.";
echo 
$sm;
}
}
else
{
?>
<center><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input name="sent" type="hidden" value=1 />
<table width="53%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <th colspan="2" align="center" scope="col"><h3>Регистрация пользователя </h3></th>
  </tr>
  <tr>
    <td width="48%" align="center">&nbsp;</td>
    <td width="52%">&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Ваш логин:</strong></td>
    <td><input name="login" maxlength="15" type="text" size="20" value="<? echo $_POST['login']; ?>" /></td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Ваш пароль:</strong></td>
    <td><input name="passw" maxlength="10" type="password" size="20" value="<? echo $_POST['passw']; ?>" /></td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><strong>Имя/Отчество:</strong></td>
    <td><input name="firstname" type="text" value="<? echo $_POST['firstname']; ?>" /></td>
  </tr>
  <tr>
    <td align="center">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td align="center"><input type="submit" value="Зарегится" /></td>
    <td align="center"><input type="reset" value="Очистить" /></td>
  </tr>
</table>
</form></center>
<?
}
?>

База данных:

PHP код:

-- 
-- 
Структура таблицы `user`
-- 

CREATE TABLE `user` (
  `
idint(11NOT NULL auto_increment,
  `
loginvarchar(15NOT NULL,
  `
passvarchar(10NOT NULL,
  `
firstnamevarchar(126NOT NULL,
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;

-- 
-- 
Дамп данных таблицы `user`
-- 


EvroStandart 26.01.2007 23:01

пишеш SELECT COUNT id AS number WHERE `login`='tvoj_login'
потом просто выполняеш и проверяеш. Если результат 0 - такого нет; если 1 - такой есть.
Дальше пишеш сообщение ошибки или соответственно добавляеш и пишеш "всё добавилось"

нак 22.02.2007 12:41

Спасибо решил проблемку. Все проверяет и работает, но осталась другая проблема, чтобы уже авторизованым меня не выкидывало с авторизации и не повторяться в авторизации. А то хожу по страницам и меня выкидывает и приходится повторно авторизовываться. Вот код авторизации повторяю:

PHP код:

<?
include ("config.php");
$sm '<INPUT TYPE="button" VALUE="Выйти" onClick="history.back()">';
if (
$_POST['session']==1) {
$_POST['login'] = str_replace('~','',strip_tags(trim ($_POST['login'])));
$_POST['passw'] = str_replace('~','',strip_tags(trim ($_POST['passw'])));
if (!
$_POST['login']) { echo "<center><br>Пожалуйста введите логин</center><br>"; unset ($_POST['sent']); echo $sm; exit;}
if (!
$_POST['passw']) { echo "<center><br>Пожалуйста введите пароль</center><br>"; unset ($_POST['sent']); echo $sm; exit;}
$sql="select login, pass, firstname, email from user where login = '$_POST[login]' and pass = '$_POST[passw]' limit 1";
$result=mysql_query($sql,$db_conn);
$row=mysql_fetch_array($result);
if (
$_POST['login']==$row[login] AND $_POST['passw']==$row[pass])
{
echo 
"Добро пожаловать $row[firstname] рад Вас видеть.";
echo 
$sm;
}
else
{
echo 
"Такого пользователя/пароля в базе нет. Повторите авторизацию<br>";
echo 
$sm;
}
}
else
{
?>
<center><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input name="session" type="hidden" value=1 />
<table width="200" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <th colspan="2" scope="col">Авторизация</th>
  </tr>
  <tr>
    <th width="75" scope="col">&nbsp;</th>
    <th width="125" scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="col">Логин</th>
    <th scope="col"><input name="login" maxlength="15" type="login" size="20" value="<? echo $_POST['login']; ?>" /></th>
  </tr>
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="col">Пароль</th>
    <th scope="col"><input name="passw" maxlength="10" type="password" size="20" value="<? echo $_POST['passw']; ?>" /></th>
  </tr>
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="col"><input type="submit" value="Войти" /></th>
    <th scope="col"><a href="?id=register">Зарегиться</a></th>
  </tr>
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
</table>
</form></center>
<?
}
?>

Т. е. как применить в скрипте куки и сессию?

EvroStandart 22.02.2007 15:18

Цитата:

Сообщение от нак (Сообщение 1361989)
А то хожу по страницам и меня выкидывает и приходится повторно авторизовываться.

Ты каждый раз проверяеш $_POST - это то, что передавалось с формы. После перехода на другую страницу оттуда всё стирается и заполняется заново (если снова что-то передавал).
Используй сессии.

добавлено через 1 минуту
Цитата:

Сообщение от нак (Сообщение 1361989)
как применить в скрипте куки и сессию

а не прогуляться ли тебе с этим вопросом на гугл?

Павел 22.02.2007 15:38

1. В самом начале КАЖДОЙ страницы вызываешь ф-цию

Код:

session_start();

2. После проверки логина и пароля установи переменную сессии (имя переменной _access__ и ее содержимое может быть произвольным):

Код:

$_SESSION["_access__"] = "On";

3. Теперь тебе достаточно проверить переменную сессии для того, что бы определить авторизован ли уже этот пользователь:

Код:

if(isset($_SESSION["_access__"]))
 if($_SESSION["_access__"] == "On")
  {
  <Этот пользователь авторизован>
  }
 else
  {
  <А этого мы пошлем на хутор бабочек ловить...>
  }


4. И последнее. При выходе пользователя должен выполнится следующий скрипт:

Код:

if(isset($_SESSION["_access__"])) unset($_SESSION["_access__"]);
session_destroy();

Сделай, например, ссылку "Выход" и пусть этот скрипт выполнится при переходе по ней.

Цитата:

Сообщение от EvroStandart (Сообщение 1362180)
а не прогуляться ли тебе с этим вопросом на гугл?

Кстати, да...

нак 22.02.2007 16:00

Цитата:

Сообщение от Павел (Сообщение 1362211)
1. В самом начале КАЖДОЙ страницы вызываешь ф-цию


Код:
session_start();

Что я спрашиваю потому что уже пробывал это и мне место работы выдавало ошибку что приходилось ставить перед знак @.
Спасибо попробую

нак 22.02.2007 19:04

Цитата:

Сообщение от Павел (Сообщение 1362211)
4. И последнее. При выходе пользователя должен выполнится следующий скрипт:


Код:
if(isset($_SESSION["_access__"])) unset($_SESSION["_access__"]);
session_destroy();

Что то не работает выход из сайта.

PHP код:

<?
session_start
();
if (isset (
$_REQUEST['action'])=='logout')
{
if(isset(
$_SESSION['$_POST[login]'])) unset($_SESSION['$_POST[login]']); 
session_destroy();
session_unset();
}
include (
"config.php");
$sm '<INPUT TYPE="button" VALUE="Выйти" onClick="history.back()">';
$ext="<a href=?action=logout><input type=button value=Выйти></a>";
$_SESSION['$_POST[login]'] = "On";
if(isset(
$_SESSION['$_POST[login]']))
 if(
$_SESSION['$_POST[login]'] == "On")
  {
  
$sql="select login, pass, firstname, email from user where login = '$_POST[login]' and pass = '$_POST[passw]' limit 1";
$result1=mysql_query($sql,$db_conn);
$row=mysql_fetch_array($result1);
   echo 
"Добро пожаловать $row[firstname] ";
   echo 
$ext;
  }
 else
 {
if (
$_POST['session']==1) {
$_POST['login'] = str_replace('~','',strip_tags(trim ($_POST['login'])));
$_POST['passw'] = str_replace('~','',strip_tags(trim ($_POST['passw'])));
if (!
$_POST['login']) { echo "<center><br>Пожалуйста введите логин</center><br>"; unset ($_POST['sent']); echo $sm; exit;}
if (!
$_POST['passw']) { echo "<center><br>Пожалуйста введите пароль</center><br>"; unset ($_POST['sent']); echo $sm; exit;}
$sql="select login, pass, firstname, email from user where login = '$_POST[login]' and pass = '$_POST[passw]' limit 1";
$result=mysql_query($sql,$db_conn);
$row=mysql_fetch_array($result);
if (
$_POST['login']==$row[login] AND $_POST['passw']==$row[pass])
{
echo 
"Добро пожаловать $row[firstname] рад Вас видеть.";
echo 
$sm;
}
else
{
echo 
"Такого пользователя/пароля в базе нет. Повторите авторизацию<br>";
echo 
$sm;
}
}
else
{
?>
<center><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input name="session" type="hidden" value=1 />
<table width="200" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <th colspan="2" scope="col">Авторизация</th>
  </tr>
  <tr>
    <th width="75" scope="col">&nbsp;</th>
    <th width="125" scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="col">Логин</th>
    <th scope="col"><input name="login" maxlength="15" type="login" size="20" value="<? echo $_POST['login']; ?>" /></th>
  </tr>
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="col">Пароль</th>
    <th scope="col"><input name="passw" maxlength="10" type="password" size="20" value="<? echo $_POST['passw']; ?>" /></th>
  </tr>
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
  <tr>
    <th scope="col"><input type="submit" value="Войти" /></th>
    <th scope="col"><a href="?id=register">Зарегиться</a></th>
  </tr>
  <tr>
    <th scope="col">&nbsp;</th>
    <th scope="col">&nbsp;</th>
  </tr>
</table>
</form></center>
<?
}
}
?>


Павел 23.02.2007 14:22

То, что у тебя session_start() вызывает ошибку более чем странно. Покопайся в настройках. Я даю тебе проверенный тестовый пример авторизации с использованием session и cookies. Просто создай файлы с указанными именами и содержимым. Посмотри будет ли он работать на твоем хостинге.

Файл №1: index.php
PHP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<body>
<?php
session_start
();
if(isset(
$_SESSION["__access_"]))
 {
  if(
$_SESSION['__access_'] == "On"
  {
?>
   Вы авторизованы<p>
   <a href="page2.php">Страница 2</a><p><p>
   <a href="logout.php">Выход</a>
<?php
  
}
 }
 else 
 {
?>
  Вы не авторизованы<p>
  <a href="page2.php">Страница 2</a><p><p>
  <a href="auth.html">Вход</a>
<?php
 
}
?>
</body>
</html>

Файл №2: page2.php
PHP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<body>
<?php
session_start
();
if(isset(
$_SESSION["__access_"]))
 {
  if(
$_SESSION['__access_'] == "On"
  {
?>
   Вы авторизованы<p>
  <a href="index.php">Страница 1</a><p><p>
  <a href="logout.php">Выход</a>
<?php
  
}
 }
 else 
 {
?>
  Вы не авторизованы<p>
  <a href="index.php">Страница 1</a><p><p>
  <a href="auth.html">Вход</a>
<?php
 
}
?>
</body>
</html>


Файл №3: auth.html
PHP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>


<
body>

<
form action="auth.php" method="post">
 
Имя: <input name="login" type="edit" /><br>
 
Пароль: <input name="pswd" type="edit" /><p>
 <
input type="submit" value="Войти" />
</
form>

</
body>
</
html


Файл №4: auth.php
PHP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<meta http-equiv="*******" content="0; URL=index.php">
</head>

<body>
<?php
session_start
();
echo  
$_POST['login']."  #  ".$_POST['pswd'];
if((
$_POST['login'] == "Name") && ($_POST['pswd'] == "1")) 
 
$_SESSION['__access_'] = "On";
?>

</body>
<html>


Файл №5: logout.php
PHP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<meta http-equiv="*******" content="0; URL=index.php">
</head>

<body>
<?php
session_start
();
if(isset(
$_SESSION["_access__"])) unset($_SESSION["_access__"]); 
session_destroy();
?>
</body>
<html>


EvroStandart 23.02.2007 16:13

Цитата:

Сообщение от Павел (Сообщение 1362790)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<body>
<?php
session_start();

Ты этот код проверял? Если я правильно помню, до session_start() ничего броузеру передавать нельзя.

Павел 23.02.2007 16:36

2 EvroStandart
Проверял. Передавать нельзя тело документа (документация PHP: you must call session_start() before anything is outputted to the browser.), а в указанном тобой фрагменте

Код HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<body>
<?php

определяется DTD.

2 нак
Насчет ошибки при вызове session_start(). Какой у тебя PHP? В документации нашел следующее примечание:

As of PHP 4.3.3, calling session_start() while the session has already been started will result in an error of level E_NOTICE. Also, the second session start will simply be ignored.

нак 24.02.2007 10:08

У меня и выдает ошибку в шаблонах где до сессии написано всего, а где сначала ссесия открывается и дальше все нормально работает без ошибок


Часовой пояс GMT +4, время: 10:39.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.