Кодирование адреса электронной почты, который можно использовать как часть URL-адреса в codeigniter - PullRequest
1 голос
/ 18 ноября 2010

Есть ли способ кодировать адрес электронной почты, который можно использовать как часть URL-адреса в codeigniter ?. Мне нужно декодировать обратно адрес электронной почты с URL.

То, что я пытаюсь сделать, это просто забытое восстановление пароля. Я отправляю ссылку для подтверждения на адрес электронной почты пользователя, ссылка должна быть такой, как ../encodedEmail/forgottenPasswordCode (с обновлением forgottenPasswordCode в БД для пользователя с отправленной электронной почтой).

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

Я мог бы просто выполнить цикл - проверить таблицу с помощью запроса select (или), для которого столбец forgottenPasswordCode уникален, поэтому я продолжаю генерировать при ошибке вставки (это будет намного быстрее?) - пока я создать forgottenPasswordCode, который еще не существует в таблице.

Но парень, для которого я делаю это, не принял бы это так :). Он хочет, чтобы проверка проводилась с помощью электронной почты пользователя, он считает, что это намного быстрее.

Я работаю с codeigniter, я использовал его функцию encode (), которая, кажется, порождает такие символы, как '-slashes-', иногда прерывая кодированную строку электронной почты.

Есть еще идеи?

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

Не помещайте данные в URL, который не имеет какого-либо значения.Это оставляет два варианта:

  1. Отправить адрес как часть POST.Если это исходит из веб-формы, это путь.

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

Почему бы просто не кодировать его вURL?

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

Постарайтесь сохранить параметры в URL-адресах, чтобы очистить ссылки на концепции в вашем веб-приложении (укажитенапример, один пользователь с идентификатором или именем в виде открытого текста).Параметры, которые не помещаются в URL, входят в параметры POST.Если вам необходимо использовать что-то, закодированное в URL, предпочтите одностороннее кодирование и поиск в базе данных.

1 голос
/ 19 ноября 2010

попробуйте использовать функции bin2hex () и hex2bin (),

<?php
function hex2bin($str) 
{
    $bin = "";
    $i = 0;
    do 
    {
        $bin .= chr(hexdec($str{$i}.$str{($i + 1)}));
        $i += 2;
    } while ($i < strlen($str));
    return $bin;
}

$str = 'email@website.com';

$output = bin2hex($str);
echo $output . '<br/>';

echo hex2bin($output);

?>
0 голосов
/ 13 мая 2016

Хотя это может быть неоптимальное дизайнерское решение для использования электронной почты как частичного URL, использовать электронную почту как строку в кодировке base64, чтобы избежать проблем со специальными символами

например. Строка в кодировке Base64 'abc-def@example.com' равна

YWJjLWRlZkBleGFtcGxlLmNvbQ==

В вашем случае URL-адрес

../YWJjLWRlZkBleGFtcGxlLmNvbQ==/forgottenPasswordCode

Все, что вам нужно, это декодировать эту строку обратно перед использованием

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...