Перейти к публикации

Gorets

Клиенты
  • Публикации

    116
  • Зарегистрирован

  • Посещение

  • Дней в лидерах

    1

Сообщения, опубликованные пользователем Gorets

  1. При формировании define( 'DOMAIN', $domain_cookie ); учитывать возможные настройки сервера, иначе куки и сессии выставляются для www.site.org.ua и на info.site.org.ua уже не доступны.

    Я у себя прописал в .htaccess

    
    php_value session.cookie_domain .site.org.ua
    
    
    необходимо проверять:
    
    $currentCookieParams = session_get_cookie_params();
    
    $currentCookieParams["domain"];
    
    

    и если домен задан настройками сервера, то отдавать этим настройкам предпочтение.

  2. Сделать единую точку входа для всех AJAX запросов сайта!

    Ну это же просто идиотизм во всех файлах /engine/ajax/ дублировать один и тот же код!

    Как вариант все запросы отсылать на /index.php а потом по заголовку HTTP_X_REQUESTED_WITH отлавливать AJAX и перенаправлять в нужное место.

  3. В мастере оптимизации есть пересчёт статистики, если не ошибаюсь он произведёт обновление кол-ва ПМ.

    ошибаетесь... я предложил этот вариант разработчику скрипта включить в ДЛЕ, но получил отказ.

    Я прекрасно понимаю, что это может понадобиться единицам, но всё же...

  4. Мастер оптимизации -> 4. Очистка персональных сообщений пользователей

    Вы можете очистить все персональные сообщения ваших пользователей

    А не сильно ли кардинально? В базе полно нормальных сообщений!

  5. После массовой рассылки спамерских ПМ пользователям сайта пришлось вручную в таблице dle_pm удалять строки т.к. другого иного стандартного способа управления ПМ в DLE не существует.

    После удаления записей возникла необходимость пересчитать общее количество и количество непрочитанных ПМ в таблице пользователей dle_users

    Предлагаю вниманию один из возможных вариантов решения данной задачи. Достаточно выполнить один запрос к базе данных:

    
    update `dle_users` u
    
    left join
    
    (
    
    select
    
    
    usr.user_id,
    
    usr.name,
    
    CASE
    
    	WHEN  ISNULL(pm.kvo) THEN  0
    
    	ELSE  pm.kvo
    
    END as pm_all
    
    ,
    
    CASE
    
    	WHEN  ISNULL(pm_unread.kvo) THEN  0
    
    	ELSE  pm_unread.kvo
    
    END as pm_unread
    
    from
    
    `dle_users` usr
    
    
    left join ( select `user`, count(`user`) as kvo from dle_pm p where p.folder='inbox' group by p.`user`) pm on usr.`user_id` = pm.`user`
    
    left join ( select `user`, count(`user`) as kvo from dle_pm p2 where p2.folder='inbox'and p2.pm_read='no' group by p2.`user`) pm_unread on usr.`user_id` = pm_unread.`user`
    
    ) pm_select
    
    on pm_select.user_id = u.`user_id`
    
    
    set u.`pm_all` = pm_select.pm_all,  u.`pm_unread` = pm_select.pm_unread
    
    

    код приведен для стандартного префикса таблиц 'dle_'

    Тестировалось на DLE 9.4, но быстрее всего будет актуально для всех версий скрипта за последние пару лет.

  6. Временное решение нашел, отключил блокировку после 3 ошибок авторизации, но почему оно возникает, если включено?

    Быстрее всего проблемы в настройках хостинга. Для движка все пользователи видны с одного IP, а не со своих реальных, вот и происходит блокировка для всех после того, как хоть кто-то один введет 3 раза неверный пароль.

    Так что трясите админов, пусть нормально настраивают хостинг.

  7. Разделить понятия "Включить поддержку регистрации и авторизации на сайте" на два отдельных. Мне нужно, чтобы пользователи могли авторизовываться, но не регистрироваться. Регистрировать я их буду сам в админке.

  8. Так намного удобнее будет работать с авторизацией на поддоменах сайта, т.е. авторизовавшись на основном сайте site.ru эта-же авторизация будет актуальна и на help.site.ru

    Это давно уже стандартная возможность скрипта и ничего не нужно делать или дописывать. Авторизация автоматически распространяется и домен и все его поддомены.

    К сожалению Вы немного ошибаетесь. Cookie dle_user_id действительно устанавливаются для домена .site.ru а вот куки сессий устанавливаются жестко www.site.ru и соответственно потом не доступны на help.site.ru

    В итоге залогиниться получается и на сайте и автоматом на поддоменах по ($_COOKIE) , а вот выполнить logout получается только в одном месте т.к. не доступна кука с сессией, которую надо бы удалить, и во втором месте идет авторизация по этой оставшейся сессии.

  9. По аналогии с функцией set_cookie() сделать функцию set_session() и все вызовы в скриптах @session_start (); делать через новую функцию.

    Пример функции:

    
    define( 'DOMAIN', ".site.ru" );
    
    set_session() {
    
    $currentCookieParams = session_get_cookie_params();
    
    session_set_cookie_params(
    
    
      $currentCookieParams["lifetime"],
    
      $currentCookieParams["path"],
    
      DOMAIN,
    
      $currentCookieParams["secure"],
    
      $currentCookieParams["httponly"]
    
    );
    
    }
    
    

    Так намного удобнее будет работать с авторизацией на поддоменах сайта, т.е. авторизовавшись на основном сайте site.ru эта-же авторизация будет актуальна и на help.site.ru

    • Поддерживаю 1
  10. На сколько я вижу, то проблеме уже как минимум месяц Bug #4306, но решения еще нет. Может стоит временно откатиться на старую версию редактора с внесением в него тега media?

    У меня на сайте оперой пользуется порядка 35% пользователей и все они не смогут добавить новость...

  11. Если есть правила, значит и есть те, кто их нарушает.

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

    Я предлагаю переделать модуль "Правила сайта" и сделать его более гибким:

    - каждый пункт правил сделать отдельной записью в базе

    - предусмотреть древовидный вариант Правил

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

    - забаненному пользователю выводить пункты, по которым его наказали

    - в профиле пользователя добавить признак "Принял правила сайта"

    - сбрасывать данный признак при бане, чтобы потом пользователю опять пришлось подтверждать принятие правил

    - без признака "Принял правила сайта" приравнивать пользователя к гостям

    • Поддерживаю 2
  12. Vladimir Gorobets,

    Ничего не понял. Ваши письма доходят но попадают в спам? И Рамблер вам посоветовал добавить заголовок Content-Transfer-Encoding?

    Да, письма регистрации на рамблер стали возвращаться с пометкой спам. Я обратился в поддержку рамблера и выслал пример ответа их сервера на письмо с регистрацией. После этого они и написали про несоответствие стандартам.

    вот пример такого письма:

    Hi. This is the qmail-send program at node.realhosting.com.ua.

    I'm afraid I wasn't able to deliver your message to the following addresses.

    This is a permanent error; I've given up. Sorry it didn't work out.

    <sovos@rambler.ru>:

    81.19.66.234 failed after I sent the message.

    Remote host said: 554 5.7.1 Spam message rejected; If this is not spam

    contact abuse at rambler-co.ru

    --- Below this line is a copy of the message.

    Return-Path: <info@stakhanov.org.ua>

    Received: (qmail 23910 invoked by uid 48); 24 Aug 2010 15:49:25 +0300

    Date: 24 Aug 2010 15:49:25 +0300

    Message-ID: <20100824124925.23901.qmail@node.realhosting.com.ua>

    To: sovos@rambler.ru

    Subject: =?windows-1251?b?wOry6OLg9uj/IODq6uDz7fLg?=

    MIME-Version: 1.0

    Content-type: text/plain; charset="windows-1251"

    From: "=?windows-1251?b?0fLg9eDt7uI6IGPg6fIg4+7w7uTgLiDN7uLu8fLoLCDu4fr/4uvl7ej/LCDq4PLg6+7jIO/w5eTv8Oj/8ujpIOgg9Ojw7CDR8uD14O3u4uA=?="

    <info@stakhanov.org.ua>

    X-Priority: 3

    X-MSMail-Priority: Normal

    X-Mailer: DLE PHP

  13. Vladimir Gorobets,

    это же для передачи вложений по E-mail, DLE не шлет вложений, он отправляет обычные текстовые письма.

    Продолжение переписки:

    >так что, письма помечаются как спам только из-за отсутвия этого

    >заголовка? ведь месяц назад таких проблем не было.

    >Нет, есть еще некоторые проблемы, но добавить этот заголовок будет достаточно, чтобы Ваши письма проходили.

    Для меня тоже кажется это немного странным.

  14. Поддержка Рамблера говорит что:

    Здравствуйте.

    Ваши письма не соответствуют стандартам RFC.

    По rfc2047, если в теме письма присутствуют 8-битные символы, то заголовок Content-Transfer-Encoding обязателен.

    Версия ДЛЕ 8.5 stakhanov.org.ua

  15. 1. Систему кэширования ДЛЕ переписать в отдельный класс с возможностью выбирать тип кэша: на файлах, как сейчас или к примеру memcached.

    2. Для снижения нагрузки на базу данных таблицу dle_users разделить на 2 таблицы к примеру dle_users и dle_users_info. В первой таблице оставить поля, необходимые для авторизации пользователя и все часто меняющиеся поля, а во вторую таблицу вынести поля, которые изменяются очень редко: info, signature, fullname, foto и т.д.

    3. Данные из таблицы dle_users_info кэшировать, чтобы снизить нагрузку mysql.

  16. Пароль можно сменть совершенно любому пользователю сайта и потом зайти с его правами. В основном наверно меняли пароль пользователю с id=1 т.е. админу, а дальше делай с сайтом что хочешь. Действительно дырка ОЧЕНЬ опасная, поэтому предупредите всех своих знакомых, которые могут использовать DLE 8.2, чтобы они в срочном порядке ставили патч.

    Если же Вы не можете зайти на свой сайт под старым паролем, то на 99% Ваш аккаунт взломан. Дальше надо ставить патч и искать, что злоумышленники могли натворить с сайтом. Например добавить в админы еще одного пользователя, слить бэкап Вашей базы, накидать спам-ссылок в новости и т.д. Желательно проверить логи сервера, чтобы разобраться что-же именно делал злоумышленник на сайте.

    Еще раз напоминаю, что дырка касается только DLE версии 8.2, так что остальным опасаться не надо.

  17. engine/editor/jscripts/tiny_mce/plugins/typograf/handler.php

    вот в таком виде у меня заработало нормально

    <?php
    
    
    if (get_magic_quotes_gpc()) {
    
    	function stripslashes_deep($value)
    
    	{
    
    		$value = is_array($value) ?
    
    					array_map('stripslashes_deep', $value) :
    
    					stripslashes($value);
    
    
    		return $value;
    
    	}
    
    
    	$_POST = array_map('stripslashes_deep', $_POST);
    
    	$_GET = array_map('stripslashes_deep', $_GET);
    
    	$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    
    	$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
    
    }
    
    
    function convert_unicode($t, $to = 'windows-1251') {
    
    	$to = strtolower( $to );
    
    
    	if( $to == 'utf-8' ) {
    
    
    		return urldecode( $t );
    
    
    	} else {
    
    
    		if( function_exists( 'iconv' ) ) $t = iconv( "UTF-8", $to . "//IGNORE", $t );
    
    		else $t = "The library iconv is not supported by your server";
    
    
    	}
    
    
    	return urldecode( $t );
    
    }
    
    
    $word = convert_unicode($_POST['text']);
    
    require_once("typographus.php");
    
    $typo = new typographus();
    
    $out_txt = $typo->process($word);
    
    
    @header("Content-type: text/css; charset=windows-1251");
    
    print $out_txt;

×
×
  • Создать...