вопрос
Так как блог не работает, я хотел сообщить всем, что Вход (у меня версия DLE 10,2) не работает правильным образом на версиях выше 5,3. В админке моего хостинга долгое время была надпись 5,3 (рекомендуется, стабильная версия). Но потом я заметил, что уже пишет PHP 5.6 (рекомендуется, стабильная версия). Соответственно я поменял и очень долгое время ничего не подозревал. На моем сайте работал вход. Я все протестировал и успокоился. Но проблема глубже.
Когда мы делаем первый вход, то сначала проверка происходит через базу данных:
после вот этого места
в этом условии есть такие строчки:
а перед эти строчками есть функция, которая должна была генерировать и обновлять идентификатор текущей сессии:
и вот в новых версиях, наличия этой строчки предвещает беду. Я ее просто закомментировал и все заработало как надо.
Потому, что строчки $_SESSION сохраняли сессию на сервере и при следующем обращении к любой страничке доступ пользователю дается не через проверку логина и пароля взятых из куки, а по сессии, который передает куки. Скорость проверки сессии конечно же больше.
И еще один совет, кто не может перейти с старых версий на новую через многочисленные правки или другие причины. В запросах SELECT к базе данных команда разработчиков DLE не использовала самое главное! Они опустили важный момент LIMIT 1. Я лично проводил тесты с наличием LIMIT 1 и без него и могу точно сообщить, что скорость выполнения запроса к MySQL может быть увеличена в СТО РАЗ если эта запись практически первая и база данных большая и примерно на пару миллисекунд быстрее, если это последняя запись.Если LIMIT не поставить, то поиск продолжается до самого конца. По этому и тратится дорогое время. А теперь посчитайте, если у вас много пользователей и много новостей. LIMIT 1 очень быстрей справляется с заданием.
Это был не вопрос, но все же интересно будет узнать что другие думают и было ли полезно.
Когда мы делаем первый вход, то сначала проверка происходит через базу данных:
после вот этого места
elseif( isset( $_COOKIE['dle_user_id'] ) AND intval( $_COOKIE['dle_user_id'] ) > 0 AND $_COOKIE['dle_password']){
в этом условии есть такие строчки:
$_SESSION['dle_user_id'] = $member_id['user_id'];
$_SESSION['dle_password'] = $_COOKIE['dle_password'];
$_SESSION['member_lasttime'] = $member_id['lastdate'];
а перед эти строчками есть функция, которая должна была генерировать и обновлять идентификатор текущей сессии:
[b]session_regenerate_id()[/b];
и вот в новых версиях, наличия этой строчки предвещает беду. Я ее просто закомментировал и все заработало как надо.
Потому, что строчки $_SESSION сохраняли сессию на сервере и при следующем обращении к любой страничке доступ пользователю дается не через проверку логина и пароля взятых из куки, а по сессии, который передает куки. Скорость проверки сессии конечно же больше.
И еще один совет, кто не может перейти с старых версий на новую через многочисленные правки или другие причины. В запросах SELECT к базе данных команда разработчиков DLE не использовала самое главное! Они опустили важный момент LIMIT 1. Я лично проводил тесты с наличием LIMIT 1 и без него и могу точно сообщить, что скорость выполнения запроса к MySQL может быть увеличена в СТО РАЗ если эта запись практически первая и база данных большая и примерно на пару миллисекунд быстрее, если это последняя запись.Если LIMIT не поставить, то поиск продолжается до самого конца. По этому и тратится дорогое время. А теперь посчитайте, если у вас много пользователей и много новостей. LIMIT 1 очень быстрей справляется с заданием.
Это был не вопрос, но все же интересно будет узнать что другие думают и было ли полезно.