|
|
|
| вообщем мне нужно записать в куки зашифрованное имя пользователя.
пользователь вводит в форму имя и пароль, происходит проверка корректности ввода и если все верно, нужно в куки записать зашифрованное имя...
нужно использовать симметричное шифрование, я выбрал mcrypt
вот функция шифровки:
function crypt_data ($data)
{
$crypt_key = "ключик";
$crypt_data = mcrypt_ecb (MCRYPT_3DES, $crypt_key, $data, MCRYPT_ENCRYPT);
return $crypt_data;
}
|
При помощи етой функции имя шифруется и результат должен заноситься в куки...
setcookie('username',$crypt_name,time()+60*60*3);
|
Но при выполнении скрипта происхоидит ошибка:
Cannot modify header information - headers already sent by (output started at ~~~\config.php:55) in ~~~\login.php on line 32
сама функция шифровки находится в файле конфиг.пхп, а шифровка в файле логин.пхп... 55 строка файла конфиг - строка где шифруются данные, а в 32 строке логин.пхп происходит запись в куки.... файл конфиг приинклюжен к файлу логин.пхп...
что можно сделать? что-то не могу ничего путного придумать... | |
|
|
|
|
|
|
|
для: kasmanaft
(09.02.2006 в 17:10)
| | Эта ошибка показыает что в 55 строке файла config происходи вывод в браузер.
А что там до 55 строки происходило? | |
|
|
|
|
|
|
|
для: Axxil
(09.02.2006 в 17:23)
| | до 55 строки были объявлены переменные для достура к базе данных (имя пароль и тд.) ... если достуа к базе нет - выводит извинения... в общем в браузер само по себе (без опр. условий, т.е. нерабочей базы данных) там ничего не выводится...
причем если не использовать функцию шифровки, то все работает. Все заносится в куки прекрасно... а вот с шифрованием проблемы :(
добавлю, что имя и пароль пользователь вводит в один файл (login_form.php), содержищий саму форму, который посылает данные другому файлу (login.php)... так было удобней... но думаю это не существенно... | |
|
|
|
|
|
|
|
для: kasmanaft
(09.02.2006 в 17:45)
| | существенно: куки должны быть отправлены броузеру до начала вывода каких либо данных. | |
|
|
|
|
|
|
|
для: Loki
(09.02.2006 в 18:04)
| | неее... браузер не выводит ничего... он выводит если только база данных не доступна, тогда конечно - какие там куки... я же говорю, что без шифрования все работает!
когда я эту функцию не использую - все работает, стоит подправить одну строку - все, приехали :)
вот как все происходит:
когда $name = $_POST['name']; - все работает...
а когда $name = crypt_data ($_POST['name']); - то уже не работает :((
я вот думаю, что дело в "mcrypt_ebc" ... может быть она что-нибудь эдакое скрытое выводит? | |
|
|
|
|
автор: Новичек (09.02.2006 в 19:00) |
|
|
для: kasmanaft
(09.02.2006 в 18:27)
| | вы пишите
>вот функция шифровки:
function crypt_data ($data)
{
$crypt_key = "ключик";
$crypt_data = mcrypt_ecb (MCRYPT_3DES, $crypt_key, $data, MCRYPT_ENCRYPT);
return $crypt_data;
}
|
>При помощи етой функции имя шифруется и результат должен заноситься в куки...
setcookie('username',$crypt_name,time()+60*60*3);
|
но вот что не ясно, откуда у вас берется $crypt_name ?
вроде судя по вашем кодам она нигде не определяется.
я вообщето шифрую так
$info = base64_encode("$username:$mail:$pass");
setcookie("users","$info",time()+2592000);
|
расшифровка
$users = $_COOKIE['users'];
$users = base64_decode($users);
|
| |
|
|
|
|
|
|
|
для: Новичек
(09.02.2006 в 19:00)
| | кодировать base64, не думаю что это лучшее решение... base64_decode и всей защите привет :)
никак не могу сообразить в чем проблема...
$crypt_name = crypt_data($name); (где $name это имя пользователя, прошедшее через регулярное выражение (очистка от всяких пакостей))
регулярное выражение тоже работает. без шифровки все работает... :( | |
|
|
|
|
|
|
|
для: kasmanaft
(09.02.2006 в 17:10)
| | что-то все молчат...
я понял, что ошибка происходит из-зи строки
$crypt_name = mcrypt_ecb (MCRYPT_3DES, $crypt_key, $name, MCRYPT_ENCRYPT);
видать функция mcrypt_ecb шлет какие-то хеадеры... вопрос не в том, где у меня в этой строке ошибка (там вроде бы все правильно), а в том, как бы тогда зашифровать это имя пользователя и запихать его в куки?
наверное, нужно шифровать в одном файле, а заносить результат шифрования уже в другом. Ворос как бы это реализовать, чтобы еще и безопасно было???
может быть есть другие функции симметричного шифрования? | |
|
|
|
|
|
|
|
для: kasmanaft
(10.02.2006 в 13:47)
| | Нет она ничего не отсылает, скорее всего просто выводит предупреждения. Попробуйте следующий вариант
<?php
$crypt_name = @mcrypt_ecb (MCRYPT_3DES, $crypt_key, $name, MCRYPT_ENCRYPT);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.02.2006 в 15:34)
| | блин... не помолго :(
функция эта тоже работает и ошибок не выводит ни каких... все шифруется...
если вывести имя, можно увидеть, что оно действительно зашифрованно...
провел такой тест:
<?php
$data = "lexa";
$crypt_key = "jklSDJA45SdasdAJ";
$crypt_name = @mcrypt_ecb (MCRYPT_3DES, $crypt_key, $data, MCRYPT_ENCRYPT);
echo "$crypt_name <br>";
setcookie('username',$crypt_name,time()+60*60*3);
echo $_COOKIE['username'];
?>
|
оказалось, что даже такой простенький скрипт не хочет работать... что же делать?
проверте, пожалуйста, у себя, может быть заработает? может у меня что-то с настройками не так... | |
|
|
|
|
|
|
|
для: kasmanaft
(10.02.2006 в 16:55)
| | Этот скрипт не работает, потому что перед функцией setcookie() конструкцией echo выводится информация в окно браузера - так нельзя, до вызова setcookie() в поток ничего отправляться не должно. | |
|
|
|
|
|
|
|
для: kasmanaft
(09.02.2006 в 17:10)
| | всем кто мне помогал - огромное спасибо :)
Дело решилось. Оказывается, когда я вызывал функцию mcrypt_ecb, php или апач (не знаю точно :) советовал мне этого не делать :) тем самым происходил вывод в браузер :) можно сказать что сама функция mcrypt_ecb выводила в браузер...
отключил error_reporting и все заработало :)
правда, для меня остается загадкой почему не работало @mcrypt_ecb
но все равно дело сделано - я доволен :)) | |
|
|
|