Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка пользователя на авторизованность, не на странице ввода пароля 
V
    Опции темы
Prompt
Дата 1.8.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Только не отсылайте меня к http://vingrad.ru/PHP-PHPSCRIPTS-002849
Если я реализую авторизацию с помощью сессий, то как проверить авторизован ли пользователь не на странице на которой вводится пароль, а на тех на которые пользователь приходит с главной? Надо просто проверить существование, например, переменной $_SESSION['login'] и пришел ли пользователь со страницы данного сервера?
Проверка такая
 
Код

 $SERVER_ROOT = "http://localhost/test/";
 if(eregi("^$SERVER_ROOT",$HTTP_REFERER))
 {
     ...
 }
 

Это правильно?
PM MAIL   Вверх
vasac
Дата 1.8.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата

Надо просто проверить существование, например, переменной $_SESSION['login']


а вот это
Цитата

пришел ли пользователь со страницы данного сервера?

уже по вкусу.
PM WWW   Вверх
arial
Дата 1.8.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: 6
Всего: 7



Достаточно одной таблэтки! (С)


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
Kefir
Дата 1.8.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


«Hakuna Matata»
***


Профиль
Группа: Комодератор
Сообщений: 1878
Регистрация: 25.1.2003
Где: Tampere, Suomi

Репутация: 13
Всего: 87



например, при правильном логине ты ставишь юзеру $_SESSION['logged_in'] == true; вот и проверяй эту тему. Я к сожалению не телепат и не знаю как ты логинишь, так что лучше всё-таки хотя бы опиши чего ты делаешь с юзером, чтобы отметить его как залогиненого.
PM MAIL WWW Skype   Вверх
Prompt
Дата 1.8.2006, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



У меня всего один пользователь с паролем - администратор. Поэтому я делаю так.
Код

session_start();
if(isset( $_POST['submit'] ) )
{
  if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) )
  {
    redirect( "fields" );                                                  //ошибка
  }                                      
  $access = array();  
  $access = file("access.php");  
  $access[1] = trim($access[1]);  
  $access[2] = trim($access[2]);  
  if($access[1] ==  $_POST['name']  && $access[2] == md5( $_POST['pass'] ))
   {    
    $_SESSION['login'] = $_POST['name']; 
   }  
  else
   redirect( "not_auth" );  
}
 

В access.php
Код

  <?php die; ?>  
  admin  
  passw  


А на других страницах так:
Код

  if (!isset($_SESSION['name']))
      echo "Доступ невозможен"; 

Этого достаточно? 
PM MAIL   Вверх
AztEK
Дата 1.8.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Лучше смотреть сессию, чем referer - глючит меньше.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Prompt
Дата 1.8.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Это как?
PM MAIL   Вверх
Mal Hack
Дата 1.8.2006, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Prompt @  1.8.2006,  17:24 Найти цитируемый пост)
Только не отсылайте меня к http://vingrad.ru/PHP-PHPSCRIPTS-002849

Какая разница? Алгоритм один и тот же.

Цитата(Kefir @  1.8.2006,  17:43 Найти цитируемый пост)
например, при правильном логине ты ставишь юзеру $_SESSION['logged_in'] == true; вот и проверяй эту тему. Я к сожалению не телепат и не знаю как ты логинишь, так что лучше всё-таки хотя бы опиши чего ты делаешь с юзером, чтобы отметить его как залогиненого. 


Цитата(Prompt @  1.8.2006,  19:09 Найти цитируемый пост)
Поэтому я делаю так.

Ребят, сессию вполне можно поддералать, поэтому на такие варианты решения полагаться нельзя.
PM ICQ   Вверх
arial
Дата 1.8.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: 6
Всего: 7



Цитата
Ребят, сессию вполне можно поддералать, поэтому на такие варианты решения полагаться нельзя.
Лучьше юзать PEAR::Auth.
Новичкам он особенно подходит. smile 


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
Prompt
Дата 1.8.2006, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



А если запоминать какой-нибудь id, как в FAQ, в виде md5(время+имя пользователя+ еще что-то), но только не в таблице, а опять же в файле. И проверять его на всех страницах?
PM MAIL   Вверх
Mal Hack
Дата 1.8.2006, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Prompt @  1.8.2006,  21:04 Найти цитируемый пост)
А если запоминать какой-нибудь id, как в FAQ, в виде md5(время+имя пользователя+ еще что-то), но только не в таблице, а опять же в файле. И проверять его на всех страницах? 

Не имеет значения ГДЕ ты будешь хранить данные, главное алгоритм. Надеюсь пароль не будешь в txt кидать.
PM ICQ   Вверх
Vreden
Дата 1.8.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Idiotic Admin
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 12.7.2006

Репутация: нет
Всего: 1



Цитата

Не имеет значения ГДЕ ты будешь хранить данные, главное алгоритм. Надеюсь пароль не будешь в txt кидать.

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


--------------------
Чё? Как? ©
PM MAIL WWW   Вверх
Mal Hack
Дата 1.8.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Выше DocumentRoot, но скорее всего у тебя туда скрипт не сможет обратиться. Поэтому надо БД использовать.
PM ICQ   Вверх
Shark
Дата 1.8.2006, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 18.6.2006
Где: Москва

Репутация: 4
Всего: 4



я сделал через БД у ся так...:
Код

if($_POST['author'] && $res['name'])
{
echo '<br>Ник -' .$res['name'].'' ;
}
else
{
echo "Пусто";
}


где $_POST['author'] - то, что вводит юрез,а  $res['name'] - то, что находится в БД... если пользователь верно ввел логин то пишется Ник, а если нет... то "Пусто"....

и далее я писал так
$_SESSION['current_user']=$res['name']; - и все...

но это я так... как новичек писал.... но все работает нормально....+ я еще писал,сравнение пароля, сравнение имени с паролем и т.д.... но это уже мелочи


--------------------
Смерть - это только начало... 
Агентство недвижимости Premial
PM MAIL WWW ICQ   Вверх
Prompt
Дата 1.8.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



Это проверка
Код

 if(isset( $_SESSION['id'])&& file_exists("sess.php")){
    $admin = file("sess.php");
    if($admin[1] == $_SESSION['id'] ){
    ...
    }
 }


А файл sess.php выглядит вот так
Код

<?php die;>
login
password


PM MAIL   Вверх
arial
Дата 2.8.2006, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 772
Регистрация: 11.3.2003
Где: Архангельская обл .

Репутация: 6
Всего: 7



Prompt, ну ты махинатор!  smile 


--------------------
Есть люди, в которых живет Бог. Есть люди, в которых живет дьявол. А есть люди, в которых живут только глисты. (Ф. Раневская)
PM ICQ   Вверх
Mal Hack
Дата 2.8.2006, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Prompt, сделай с БД, иначе ты НЕ СДЕЛАЕШЬ безопасный скрипт.
PM ICQ   Вверх
Prompt
Дата 2.8.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 22.2.2006

Репутация: нет
Всего: нет



 smile Я еще и не такое могу. А не слишком ли будет для одной записи целую базу данных? То, что других пользователей с паролем никогда не будет - это точно. Хотя каждый раз читать файл наверное тоже накладно? По своему опыту работы с С++...
PM MAIL   Вверх
Mal Hack
Дата 2.8.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Prompt @  2.8.2006,  18:05 Найти цитируемый пост)
А не слишком ли будет для одной записи целую базу данных?

Нет.

Цитата(Prompt @  2.8.2006,  18:05 Найти цитируемый пост)
Хотя каждый раз читать файл наверное тоже накладно? По своему опыту работы с С++... 

Это самые тормознутые операции.
PM ICQ   Вверх
Gwire
Дата 2.4.2008, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4




Можно сделать так.
Код

// проверяем логин и пароль
if ( TestAUTH($_POST['user'], $_POST['pass']) )
{   // если все верно то для текущей сессии фиксируем вход
    setcookie('Login', 1);
}

Любой переход между страницами сайта будет иметь $_COOKIE['Login'] равном 1
Внимание: на этой странице (страница вызова setcookie('Login', 1);) $_COOKIE['Login'] не равен 1.
Понятно что проверять пароль если $_COOKIE['Login'] установлен - нет нужды
Код

if ( !isset($_COOKIE['Login']) )
{   if ( TestAUTH(...)
    {...
    }
    else
    {   // твой код для юзера
    }
}
else
{   // твой код для админа
}

Или php для отсутствующего елемента массива возврощает "null", что == fasle.
И все что не ==0 понятно ==true (зачем я вообще объясняю, хотя может что-то забыл)
Кстати вызывать setcookie('Login', true) не советую - "глюки какие-то" (не разбирался, "харит").
Код

// если $_COOKIE['Login']==null, то проверить логин и пароль
if ( $_COOKIE['Login']  || TestAUTH(...) )
{   setcookie('Login', 1);
    // твой код для админа
}
else
{   // твой код для юзера
}

По закритию браузера $_COOKIE['Login'] сбрасывается.

PM MAIL   Вверх
Feldmarschall
Дата 2.4.2008, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



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

Никогда так не делай.
Используй сессии.
PM   Вверх
Gwire
Дата 2.4.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4



Feldmarschall 
Цитата(Feldmarschall @  2.4.2008,  17:55 Найти цитируемый пост)
Используй сессии


smile Как утановить $_SESSION['var'] так что-бы она передалась на следующюю страницу.
Код

    if (!isset($_SESSION['var']))
        $_SESSION['var'] = 1;
    else
        echo '$_SESSION["var"] seted'."\n";

    if (!isset($_COOKIE['var']))
        setcookie('var', 1);
    else
        echo '$_COOKIE["var"] seted'."\n";

При нажатии [F5] отображается только $_COOKIE["var"] seted
PM MAIL   Вверх
Feldmarschall
Дата 2.4.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



вообще-то, нужна ещё такая функция, как session_start()
PM   Вверх
Gwire
Дата 2.4.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4




Я провильно понял
session_start()
создат сессию.
Все переменные созданные в ней
будут разрушены после применения
session_destroy()

Как-будто я закрыл браузер.


Sorry: другая тема.

Это сообщение отредактировал(а) Gwire - 2.4.2008, 18:36
PM MAIL   Вверх
Djinn
Дата 2.4.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: 1
Всего: 1



а почитать про сессии ваше в облом ???

file1:
Код

 session_start();
//присваиваем нужные сессии
$_SESSION["name"] = "name";


file2:
Код

 session_start();
echo $_SESSION["name"];


P.S. если допустился ошибки, извиняюсь... писал по быстрому...

Это сообщение отредактировал(а) Djinn - 2.4.2008, 18:39
PM MAIL   Вверх
Feldmarschall
Дата 2.4.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



примерно.только session_start() не только создает, а еще и продолжает сессию, делая её доступной в скрипте

Добавлено через 57 секунд
Djinn, session_register убери.
PM   Вверх
Djinn
Дата 2.4.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: 1
Всего: 1



Цитата(Gwire @  2.4.2008,  18:33 Найти цитируемый пост)
будут разрушены после применения
session_destroy()


нет, уничтожатся они будут при вызове ф-и ! тойсть пока ты в php не вызовешь эту ф-и, сессии будут хранится (ну я имею ввиду не смотря на перезагрузку браузера... но естественно лимитировано по времени)

Добавлено через 3 минуты и 22 секунды
Цитата(Feldmarschall @  2.4.2008,  18:36 Найти цитируемый пост)
Djinn, session_register убери. 


Спасиба, извиняюсь... все верно, без него нуно (хотя и с ним работает  smile )
PM MAIL   Вверх
Gwire
Дата 2.4.2008, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: нет
Всего: 4




А можно у ссылку на help по сессиям?
Если не сложно.
Цитата(Djinn @  2.4.2008,  18:35 Найти цитируемый пост)
а почитать про сессии ваше в облом ???

Нет.


PM MAIL   Вверх
Djinn
Дата 2.4.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: 1
Всего: 1



http://www.softtime.ru/bookphp/gl8_1.php вот вроде неплохо...
PM MAIL   Вверх
Feldmarschall
Дата 2.4.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0851 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.