Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2012, 16:18   #1
pqh
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 14
Смех Насколько это сильный изврат?))

В общем есть движок сайта, использует пхп и бд. Но вот бяда, он не многопользовательский, а я хочу именно многоюзверьский)
так вот постараюсь в краце:
есть домен вида мойсайт.ру
пользователи (если не купили домен, будут находится на мойсайт.ру/название/ )
так как файлов на чистом движке мало, то я вышел из положения так:
регистрация -> сдание папки (название) -> переброска файлов в созданную папку(авто) -> замена файла конфигурации (уже с готовыми данными для подключения к бд) (авто) -> инсталляция таблиц в уже известную бд, но с другим префиксом т.е. у каждого юзверя он свой (авто) -> страница удаления install.php (авто) ... всё это происходит моментально и сделано так, что бы нельзя было по ссылке зайти на одну из страниц отдельно (хотя я думаю сделать это всё одним скриптом на одной странице)...так вот что получается, что фактически у каждого юзверя свой движок сайта, общее только обработчик изображений (ресайз) и файл functions с основными функциями, остальное и очень много находится в index и принадлежит как бы пользователю (но там поболе функций, чем в самом functions)

как вам такое извращение? ... какие могут быть минусы у этой системы, и какие на ваш взгляд могут быть уязвимости? Да и как думаете, что будет с нагрузкой на сервер? .

п.с.

может стоит выкинуть из индекса всё что можно в общую часть и вывести её через инклуд?)

п.п.с.
то есть движок у меня сейчас грубо говоря разделён 50/50 ... 50% кода исполняется индивидуально у каждого, 50% исполняется у всех из одного места.
pqh вне форума Ответить с цитированием
Старый 24.12.2012, 22:20   #2
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Только один вопрос - кто вас учил кодить????

что мешает сделать одну таблицу и там хранить инфу о пользователе?

Чтото я не вкурил что из этого должно получится? яснее излагайте мыслю.
dem66 вне форума Ответить с цитированием
Старый 24.12.2012, 23:58   #3
pqh
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
Только один вопрос - кто вас учил кодить????

что мешает сделать одну таблицу и там хранить инфу о пользователе?

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

а должно получиться что то вроде многопользовательского сервиса)
pqh вне форума Ответить с цитированием
Старый 25.12.2012, 00:48   #4
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Что за сервис? файловое хранилище?
Ну так сделайте отдельно таблицу с юзерами, отдельно с файлами и вытаскивайте из базы нужные файлы фильмтруя по айди юзера, ну как то так...
dem66 вне форума Ответить с цитированием
Старый 25.12.2012, 01:44   #5
pqh
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
Что за сервис? файловое хранилище?
Ну так сделайте отдельно таблицу с юзерами, отдельно с файлами и вытаскивайте из базы нужные файлы фильмтруя по айди юзера, ну как то так...
хуже...портфолио))

ну вот смотрите в чём у меня сейчас загвоздка:

Код:
CREATE TABLE `profolio_info` (
  `id` int(5) NOT NULL auto_increment,
  `username` varchar(128) collate latin1_general_ci NOT NULL default '',
  `password` varchar(128) collate latin1_general_ci NOT NULL default '',
  `page_about` blob NOT NULL,
  `page_contact` blob NOT NULL,
  `firstname` varchar(255) collate latin1_general_ci NOT NULL default '',
  `lastname` varchar(255) collate latin1_general_ci NOT NULL default '',
  `email` varchar(255) collate latin1_general_ci NOT NULL default '',
  `phone` varchar(255) collate latin1_general_ci NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

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

INSERT INTO `profolio_info` VALUES(1, 'vlad', '123456', 0x266167726176653b2675636972633b2661636972633b2669756d6c3b266f756d6c3b266f61637574653b, 0x266f61637574653b2669756d6c3b266f756d6c3b2675636972633b266f61637574653b2669756d6c3b266f61637574653b2665636972633b, 'Èìÿ', 'Ôàìèëèÿ', 'adment@b1oga.net', '+37558176187 èëè +37255946144');
это таблица юзверей (да, пароль пока не зашифрован, сейчас это не надо)


я пытаюсь сделать так, что бы щас на данном этапе 2 юзверя могли зайти под 1 акк таким образрм:

Код:
INSERT INTO `profolio_info` VALUES(1, 'vlad', '123456', 0x266167726176653b2675636972633b2661636972633b2669756d6c3b266f756d6c3b266f61637574653b, 0x266f61637574653b2669756d6c3b266f756d6c3b2675636972633b266f61637574653b2669756d6c3b266f61637574653b2665636972633b, 'Èìÿ', 'Ôàìèëèÿ', 'adment@b1oga.net', '+37558176187 èëè +37255946144');
INSERT INTO `profolio_info` VALUES(2, 'vladlen', '1234567', 0x266167726176653b2675636972633b2661636972633b2669756d6c3b266f756d6c3b266f61637574653b, 0x266f61637574653b2669756d6c3b266f756d6c3b2675636972633b266f61637574653b2669756d6c3b266f61637574653b2665636972633b, 'Èìÿ', 'Ôàìèëèÿ', 'adment@b1oga.net', '+37558176187 èëè +37255946144');
как видим отличаются только логин и пароли а так же айди, но при таком раскладе я могу зайти только под vladlen и всё, под номер 1 я зайти не могу...или я не так делаю?

по сути у меня такое решение, что бд одна, а префиксы у каждого юзверя разные...хм...что то до меня начинает доходить, но пока не пойму что и смутно
pqh вне форума Ответить с цитированием
Старый 25.12.2012, 13:33   #6
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

что значит не можете?
У вас вобше авторизация по каким полям идет? логин/пароль или email/пароль????

А в чем проблема хранить работы с портфолио в одной базе? в отдной таблице.
Чтото тут полный бред
dem66 вне форума Ответить с цитированием
Старый 25.12.2012, 15:36   #7
pqh
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
что значит не можете?
У вас вобше авторизация по каким полям идет? логин/пароль или email/пароль????

А в чем проблема хранить работы с портфолио в одной базе? в отдной таблице.
Чтото тут полный бред
по логину и паролю...в том то и дело что они то как раз и разные, а авторизация не идёт на того пользователя что был раньше, зато если удалить более нового, то всё отлично...а так я бы рад хранить всё в одной базе, да не работает даже банальная таблица с юзверями
pqh вне форума Ответить с цитированием
Старый 25.12.2012, 16:17   #8
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

ну в том что оно не авторизируется так как положено база не виновата, вы бы для начала код показали.

И кто вас учил хранить данные вот так? "0x266167726176653b2675636972633b26 61636972633b2669756d6c3b266f756d6c3 b266f61637574653b"
Зачем вам blob????

и почему бы не использовать UTF-8??

Последний раз редактировалось dem66; 25.12.2012 в 16:20.
dem66 вне форума Ответить с цитированием
Старый 25.12.2012, 22:49   #9
pqh
Пользователь
 
Регистрация: 08.04.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
ну в том что оно не авторизируется так как положено база не виновата, вы бы для начала код показали.

И кто вас учил хранить данные вот так? "0x266167726176653b2675636972633b26 61636972633b2669756d6c3b266f756d6c3 b266f61637574653b"
Зачем вам blob????

и почему бы не использовать UTF-8??
код закинул сюда https://docs.google.com/open?id=0B1N...HpQcHZwdnhBZlE

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

сама форма входа
Код:
<div class="login">
        <? if($LOGGEDIN == 'no'){ ?>
        <a id="toggle_login" href="#">Вход</a>
        <div class="login_box">
            <form name="login_form" action="" enctype="multipart/form-data" method="post">
                <input name="username" value="Username" onfocus="clearDefault(this)" onblur="makeDefault(this)" />
                <input name="password" value="000000" type="password" onfocus="clearDefault(this)" onblur="makeDefault(this)" />
                <input name="login_button" type="submit" value="Вползти" /> 
            </form>
        </div>
        <? } else { ?>
        <a href="?logout=yes">Выход</a>

Последний раз редактировалось pqh; 25.12.2012 в 23:00. Причина: добавление...
pqh вне форума Ответить с цитированием
Старый 26.12.2012, 00:19   #10
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

PHP код:
if(isset($_COOKIE['PFlogin']) && isset($_COOKIE['PFpassw'])){
        if(
$_COOKIE['PFlogin'] == md5($username)){
                if(
$_COOKIE['PFpassw'] == md5($password)){
                        
$LOGGEDIN 'yes';
                }
        }

Нах***а???

Вы отдельную таблицу с сесиями завести не пробовали? А у юзера в куках ранить только token.
И данные вводимые юзером нужно фильтровать, это важно! И не стоит это откладывать на потом.

И естественно оно не будет авторизировать так как нужно.
Это что такое?
PHP код:
$info_query mysql_query("SELECT * FROM ".$prefix."ProFolio_info ORDER BY id DESC LIMIT 0,1"); 
Вы понимаете что вы вытаскиваете из базы только одного пользователя? Который записан самым первым в таблице.

Смотрите архив во вложении, советую пользоваться и не усложнять себе жизнь. Все уже давно продумано.

Пример использования (страница авторизации):
PHP код:
<?php
if(!empty($login) && !empty($password)){
    
$auth = new Auth;
    
$auth->setTableName('ProFolio_info');
    
$auth->setIdentityColumn('username');
    
$auth->setCredentialColumn('password');
    
$auth->setIdentity($login);
    
$auth->setCredential($password);
    
$auth->getResultRow('id, firstname, lastname, email, phone, page_about, page_contact');
    
    if(
$data $auth->isValid()){
        
Auth::write($data);
        
header("location: /index.php");
    }else{
        
header("location: /login.php");
    }
}
Просто проверка залогинености:
PHP код:
$read Auth::read();

if(isset(
$read["id"])){
    
//Все гуд, узер залогинен.
    //Login Information        
        
$info_id $read["id"];
        
$firstname html_entity_decode($read["firstname"]);
        
$lastname html_entity_decode($read["lastname"]);
        
$email html_entity_decode($read["email"]);
        
$phone html_entity_decode($read["phone"]);
        
$about_page html_entity_decode($read["about_page"]]);
        
$contact_page html_entity_decode($read["contact_page"]);
        
$sitename ucwords(strtolower($firstname)).' '.ucwords(strtolower($lastname));
    
}else{
    
//Все плохо, гость.
    
header("location: /login.php");

Описание:
PHP код:
$auth = new Auth// Ну соответсвенно создаём экземпляр класа авторизации, перед этим незабывая подключить файл в котором он находится.

setTableName('ProFolio_info'); // Указываем таблицу с пользователями

setIdentityColumn('username'); // Указываем первое поле

setCredentialColumn('password'); //  Указываем второе поле

setIdentity($login); // Передаем данные для первого поля

setsetCredential($password); //  Ну и соответсвенно для второго

getResultRow('id, firstname, lastname, email, phone, page_about, page_contact');  // Указываем какую инфу о пользователе нужно вытащить из базы.

if($data $auth->isValid()) // Если пользователь существует то

Auth::write($data); // записываем о нем инфу (те поля которые былы указаны в [B]getResultRow[/B]) в сессию, и она там хранится до тех пор пока юзер не уйдет с сайта или не розлогинется (нехорошо каждый раз посылать запрос к базе!).


$read Auth::read(); // Ну соответсвенно получаем инфу о пользователе. Данные берутся с сессии! 
Соответсвенно если пользователь авторизировался то переменная $read будет чтото в себе содержать, если нет то посылаем юзера на страницу авторизации.

Если функции read() не передавать никаких значений то она выдернет из сессии все что там есть, если передать параметры то соответсвенно вона вернет только их.

Например:
PHP код:
$read read('id, email'// В переменной read бут только id и email. 
Все елементарно!
Вложения
Тип файла: zip Auth.zip (655 байт, 14 просмотров)
dem66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Насколько это небезопасно xDyPx PHP 2 04.11.2012 09:22
Насколько хорошо вы знаете WordPress? Marfuta WordPress и другие CMS 0 12.06.2012 19:41
DoS.Generic.SYNFlood атака . антивирус nod 32. Что делать? Насколько это опасно для сервера и компьютеров? midnight19891 Безопасность, Шифрование 15 29.03.2012 20:55
Глобальное потепление - насколько опасно? hardorsoft Свободное общение 17 29.06.2011 13:47
Насколько безопасны запароленные архивы? gusluk Свободное общение 18 22.02.2010 12:25