Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Куки не выводятся при авторизации
 
 автор: danga   (13.03.2014 в 23:57)   письмо автору
 
 

Помогите пожалуйста разобраться с куками. Логин и пароль из куков при авторизации перестали печататься в форме на главной странице
Авторизация на главной странице. ../main/homepage.php

<?php
include_once ('../connect.php');
echo 
"*********"// эти три строчки для теста, звездочки печатаются, а вместо куков - пустота
echo $_COOKIE['login'];
echo 
$_COOKIE['passwd'];
?>
<HTML>
...
шапка сайта
....
<?php
echo '      
<form action="../intenter/login.php" method="post">
<table> 
<tr>
<td border="1" bgcolor="#f5f4f1">Login:</td>
<td border="1" bgcolor="#f5f4f1"> <input type="text" name="login" value="'
.@$_COOKIE['login'].'" </td>
<td border="1" bgcolor="#f5f4f1">Password: </td> 
<td border="1" bgcolor="#f5f4f1"> <input type="Password" name="passwd" value="'
.@$_COOKIE['passwd'].'"  </td></tr>
<tr><td #ffcc99 border="0"></td>
<td #ffcc99 border="0" align="right">Remember: </td>
<td #ffcc99 border="0" align="right"><input type="checkbox" name="remember" value="yes" checked></td> 
<td #ffcc99 border="0" align="right"><input type="submit" name="Enter" value="Enter"<td>
</tr>
</table>
</form>
'
;
?>
....
текст
</HTML>


Обработка формы в файле ../intenter/login.php

<?php
include_once ('../connect.php');
//никакого вывода и шапок нет, только проверки
include_once ("../connect.php");
if (isset(
$_POST['Enter'])) {

$login=$_POST['login'];   
$passwd=$_POST['passwd'];
$remember=$_POST['remember'];
//...проверки и выборка из базы iduser
//если пары login-passwd не существует, подключаю файл восстановления пароля

$_SESSION['login']=$login;
$_SESSION['passwd']=$passwd;
include (
'rec.php');
exit(); }

//ставлю куки на две недели. 
   
if ($remember=='yes') {
setcookie('login'$login1time()+3600*24*14);
setcookie('passwd'$passwd1time()+3600*24*14); }
...
//перенаправляю на личную страницу 
header ('location: ../users/pesrpage.php');
?>

после авторизации смотрю в настройках Google Chrom - куки там успешно прописываются. Но почему же при повторной авторизации на главной странице они не печатаются?
Никак не могу понять, в чем причина. Причем раньше они печатались, а вот примерно неделю назад печататься перестали. Я кое-что переделала на сайте за это время, но к кукам это отношения вроде бы совсем не имеет.

С уважением
Danga

  Ответить  
 
 автор: confirm   (14.03.2014 в 00:05)   письмо автору
 
   для: danga   (13.03.2014 в 23:57)
 

Пароль в куках? Это круто.
В куки не пароль записывают, а идентификатор основанный на пароле, и если этот идентификатор совпадает с "химией" над паролем, то Ок.

  Ответить  
 
 автор: danga   (14.03.2014 в 00:12)   письмо автору
 
   для: confirm   (14.03.2014 в 00:05)
 

Добрый вечер, Confirm. На самом деле у меня так и сделано, в базе хранится конечно не пароль, а хеш. Я как раз хотела вообще усовершенствовать авторизацию и сделать еще дополнительные ключи, и тут обнаружила, что у меня вообще в форму их куков ничего не записыватся. Выяснила, что сами куки прописываются, но почему-то не печатаются

  Ответить  
 
 автор: confirm   (14.03.2014 в 00:20)   письмо автору
 
   для: danga   (14.03.2014 в 00:12)
 

В базе храниться хеш и этот хеш никак не должен быть на стороне клиента в куках. В куки пишется некая производная, на основе пароля/хеша "подсоленного", который можно постоянно обновлять. Да и логин не обязательно в куки писать. Почитайте в сети об авторизации, об этом написано много, только не пытайтесь сразу копировать код, а вникните в суть.

Куки не печатают в форму, по кукам определяют авторизованного пользователя, то есть если вы пытаетесь воткнуть их форму для такого "детектирования" пользователя, то зачем, если куки и без формы доступны?

Если возникают проблемы с куками, значит вы их устанавливаете не правильно, и то что они есть в браузере, еще не говорит о том, что они будут доступны на сервере.

  Ответить  
 
 автор: danga   (14.03.2014 в 00:38)   письмо автору
 
   для: confirm   (14.03.2014 в 00:20)
 

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

  Ответить  
 
 автор: confirm   (14.03.2014 в 01:17)   письмо автору
 
   для: danga   (14.03.2014 в 00:38)
 

Еще раз - в куки пишется для того, чтобы получив их на сервере знать, что пользователь "запомнил" себя и ему не требуется производить "вход", форма для такого определения не нужна. Именно по тому, что прописано в куках и приветствуют Васю или Колю, в противном случае авторизация. Писать в куки совсем не обязательно логин и нечто от пароля, можно устанавливать просто пару - имя=значение, где имя, это производная от логина, а значение, это производная от пароля. В базе хранится и "соль" для этих производных. При каждом обращении пользователя эти значения можно динамически изменять, дабы не давать возможность использовать старые, случайно стянутые у хозяина.

Все это примерно так:

<?
if($_COOKIE) { //есть установленные куки с домена
    //получаем ключи кук, предполагая, что это имя установленного значения
    //идентифицирующее пользователя, и которое хранится в базе в поле, пусть uid
    //искать будем от обратного, то есть не извлекая сначала существующие и сравнивая с полученным
    //а есть ли среди кук uid значение, и есть ли такой пользователь в базе 
    
$uid '"'.implode('","'array_map('mysql_real_escape_string'array_keys($_COOKIE))).'"'
    if(
$r mysql_query('SELECT * FROM users WHERE uid IN('.$uid.')')) {
        
//если вернулся результат, то по полученной из базы "солью" производим проверку соответствия
        //и если Ок, приветствуем Васю, устанавливаем в сессии признак авторизации
        //здесь же можно обновить все значения кук-авторизации, запомнив их в базе и прописав клиенту    
    
}
}


Форма то тут причем? По мимо того, что сессия хранит признак входа, форма может передавать тоже некий "паспорт", но не значения кук, которые "светить", это есть плохо, а некий токен. Технология его установки может быть различной, вплоть до кук, но сессионных. Вместо токена можно использовать случайные имена полей, которые действительны только один раз - на время запроса/ответа формы.

Вы не в браузер заглядывайте, а просто проверьте на сервере куки свои, скорее всего у вас их просто нет. Чтобы куки можно было получить отовсюду на домене, при установке куки прописывайте перед именем домена точку, например так: '.'.$_SERVER["SERVER_NAME"]. Это такая интересная фича, когда для доменов первого уровня можно "вот так", а для остальных такое "не прокатит".

  Ответить  
 
 автор: danga   (14.03.2014 в 00:41)   письмо автору
 
   для: confirm   (14.03.2014 в 00:20)
 

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

  Ответить  
 
 автор: danga   (14.03.2014 в 00:57)   письмо автору
 
   для: danga   (14.03.2014 в 00:41)
 

проблема не в том, что печатать, а пролема в том, что я теперь вообще не могу получить входную инфу из куков пользователя. Если у него куки отключены, то и пусть вводит логин с паролем каждый раз. Но если включены, то почему я не могу ее достать? В чем ошибка? Даже тест не работает, простое echo $_COOKIE['login']

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования