Advertisement:

Author Topic: Для логинов содержащих русские буквы авторизация проходит со второго раза  (Read 7289 times)

Offline village_coder

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

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



Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
А в чем проблема у PHP с преобразованием регистра символов из нелатинских языков?

Offline village_coder

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

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

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

Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
А в чем проблема у PHP с преобразованием регистра символов из нелатинских языков?

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

Offline village_coder

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

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

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

Если того бага в PHP, то пожалуйста:
Code: [Select]
echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";

Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
Простите, пример чего именно?
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

Offline village_coder

  • Newbie
  • *
  • Posts: 9
Простите, пример чего именно?
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

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

Code: [Select]
echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";

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

Offline village_coder

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

Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

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

Code: [Select]
echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";

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

Offline village_coder

  • Newbie
  • *
  • Posts: 9
Пример того, что у PHP 5.3 была проблема преобразования UTF-8 кирилицы в верхний/нижний регистр.

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

Code: [Select]
echo "\n\n" . strtolower('ПрОвЕрКа') . "\n\n";

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

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

Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
Quote
По требованию заказчика немного изменил код форума

Offline village_coder

  • Newbie
  • *
  • Posts: 9
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
Quote
По требованию заказчика немного изменил код форума

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

Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
Quote
По требованию заказчика немного изменил код форума

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

Offline village_coder

  • Newbie
  • *
  • Posts: 9
И я уже сказал, что понял, что проблема вовсе не в этом. И сюда я пришел не поспорить за нюансы PHP, а всё-таки выяснить причину данной ошибки.
У коробочного форума, что на php5.3, что на php5.4 нет проблем с русскими логинами, соответственно причина не в php или форуме, а в
Quote
По требованию заказчика немного изменил код форума

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

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

Offline digger

  • Sr. Member
  • ****
  • Posts: 761
  • Gender: Male
    • realdigger on GitHub
    • SMF Russian Community
Проблема то как раз в регистрах, потому что в хэше пароля участвует и логин. Может локаль на хостинге задана жестко какая-нибудь немецкая :)
Проверяйте что из формы авторизации приходит, какой хэш получается и с каким хэшем в базе сравнивается.

Offline inter

  • Jr. Member
  • **
  • Posts: 290
  • Gender: Male
    • interlab on GitHub
Логины в SMF регистронезависимы и это правильно.

village_coder, попробуйте в файле ./Sources/LogInOut.php заменить все strtolower( на $smcFunc['strtolower'](
« Last Edit: October 24, 2013, 04:48:46 AM by Inter »
Sorry for my English