Для логинов содержащих русские буквы авторизация проходит со второго раза

Started by village_coder, October 16, 2013, 01:19:28 PM

Previous topic - Next topic

village_coder

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

Заранее большое спасибо. С уважением, village_coder.



digger

А в чем проблема у PHP с преобразованием регистра символов из нелатинских языков?

village_coder

Quote from: digger on October 16, 2013, 01:41:38 PM
А в чем проблема у PHP с преобразованием регистра символов из нелатинских языков?

Знаю про кириллические символы, что у PHP 5.3 где-то была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр. Вернее функция просто вообще не работала.

При авторизации по чисто латино-символьным логинам проблем нет. То есть первый раз авторизация не проходит только для тех логинов, в которых содержатся кириллические символы.

digger

Quote from: village_coder on October 16, 2013, 01:45:43 PM
Quote from: digger on October 16, 2013, 01:41:38 PM
А в чем проблема у PHP с преобразованием регистра символов из нелатинских языков?

Знаю про кириллические символы, что у PHP 5.3 где-то была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр. Вернее функция просто вообще не работала.
Приведите воспроизводимый пример.

village_coder

Quote from: digger on October 16, 2013, 01:47:50 PM
Quote from: village_coder on October 16, 2013, 01:45:43 PM
Quote from: digger on October 16, 2013, 01:41:38 PM
А в чем проблема у PHP с преобразованием регистра символов из нелатинских языков?

Знаю про кириллические символы, что у PHP 5.3 где-то была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр. Вернее функция просто вообще не работала.
Приведите воспроизводимый пример.

Простите, пример чего именно?

Если того бага в PHP, то пожалуйста:

echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";

digger

Quote from: village_coder on October 16, 2013, 01:49:04 PM
Простите, пример чего именно?
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

village_coder

Quote from: digger on October 16, 2013, 01:50:56 PM
Quote from: village_coder on October 16, 2013, 01:49:04 PM
Простите, пример чего именно?
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

Конечно. Пожалуйста:


echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";


На выходе получаю:
ПрОвЕрКа

village_coder

Но до меня сейчас только дошло что причина не в этом. Потомучто эта функция неработоспособна и на моей машне, однако в своей локальной копии форума я эту проблему не имею.

digger

Quote from: village_coder on October 16, 2013, 01:53:06 PM
Quote from: digger on October 16, 2013, 01:50:56 PM
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

Конечно. Пожалуйста:


echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";


На выходе получаю:
ПрОвЕрКа
Ну, то что вы пытаетесь использовать строковую функцию без задания корректной локали или используете не подходящую для мультибайтных строк функцию, вовсе не значит что "у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр".

village_coder

Quote from: digger on October 16, 2013, 01:57:30 PM
Quote from: village_coder on October 16, 2013, 01:53:06 PM
Quote from: digger on October 16, 2013, 01:50:56 PM
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

Конечно. Пожалуйста:


echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";


На выходе получаю:
ПрОвЕрКа
Ну, то что вы пытаетесь использовать строковую функцию без задания корректной локали или используете не подходящую для мультибайтных строк функцию, вовсе не значит что "у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр".

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

digger

Quote from: village_coder on October 16, 2013, 02:01:28 PM
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
QuoteПо требованию заказчика немного изменил код форума

village_coder

Quote from: digger on October 16, 2013, 02:08:08 PM
Quote from: village_coder on October 16, 2013, 02:01:28 PM
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
QuoteПо требованию заказчика немного изменил код форума

Тут вы не правы. Сейчас только проверил это на коробочном форуме - проблема точно та же самая.

digger

Quote from: village_coder on October 16, 2013, 02:13:02 PM
Quote from: digger on October 16, 2013, 02:08:08 PM
Quote from: village_coder on October 16, 2013, 02:01:28 PM
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
QuoteПо требованию заказчика немного изменил код форума

Тут вы не правы. Сейчас только проверил это на коробочном форуме - проблема точно та же самая.
Вы в курсе что логины в SMF регистрозависимые?
Не может такой проблемы быть на чистом форуме, иначе бы уже давно тут вопили все неанглоговорящие.

village_coder

Quote from: digger on October 16, 2013, 02:15:52 PM
Quote from: village_coder on October 16, 2013, 02:13:02 PM
Quote from: digger on October 16, 2013, 02:08:08 PM
Quote from: village_coder on October 16, 2013, 02:01:28 PM
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
QuoteПо требованию заказчика немного изменил код форума

Тут вы не правы. Сейчас только проверил это на коробочном форуме - проблема точно та же самая.
Вы в курсе что логины в SMF регистрозависимые?
Не может такой проблемы быть на чистом форуме, иначе бы уже давно тут вопили все неанглоговорящие.

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

digger

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

inter

Логины в SMF регистронезависимы и это правильно.

village_coder, попробуйте в файле ./Sources/LogInOut.php заменить все strtolower( на $smcFunc['strtolower'](
Sorry for my English

Advertisement: