|
|
|
| Помогите пожалуйста разобраться с куками. Логин и пароль из куков при авторизации перестали печататься в форме на главной странице
Авторизация на главной странице. ../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', $login1, time()+3600*24*14);
setcookie('passwd', $passwd1, time()+3600*24*14); }
...
//перенаправляю на личную страницу
header ('location: ../users/pesrpage.php');
?>
|
после авторизации смотрю в настройках Google Chrom - куки там успешно прописываются. Но почему же при повторной авторизации на главной странице они не печатаются?
Никак не могу понять, в чем причина. Причем раньше они печатались, а вот примерно неделю назад печататься перестали. Я кое-что переделала на сайте за это время, но к кукам это отношения вроде бы совсем не имеет.
С уважением
Danga | |
|
|
|
|
|
|
|
для: danga
(13.03.2014 в 23:57)
| | Пароль в куках? Это круто.
В куки не пароль записывают, а идентификатор основанный на пароле, и если этот идентификатор совпадает с "химией" над паролем, то Ок. | |
|
|
|
|
|
|
|
для: confirm
(14.03.2014 в 00:05)
| | Добрый вечер, Confirm. На самом деле у меня так и сделано, в базе хранится конечно не пароль, а хеш. Я как раз хотела вообще усовершенствовать авторизацию и сделать еще дополнительные ключи, и тут обнаружила, что у меня вообще в форму их куков ничего не записыватся. Выяснила, что сами куки прописываются, но почему-то не печатаются | |
|
|
|
|
|
|
|
для: danga
(14.03.2014 в 00:12)
| | В базе храниться хеш и этот хеш никак не должен быть на стороне клиента в куках. В куки пишется некая производная, на основе пароля/хеша "подсоленного", который можно постоянно обновлять. Да и логин не обязательно в куки писать. Почитайте в сети об авторизации, об этом написано много, только не пытайтесь сразу копировать код, а вникните в суть.
Куки не печатают в форму, по кукам определяют авторизованного пользователя, то есть если вы пытаетесь воткнуть их форму для такого "детектирования" пользователя, то зачем, если куки и без формы доступны?
Если возникают проблемы с куками, значит вы их устанавливаете не правильно, и то что они есть в браузере, еще не говорит о том, что они будут доступны на сервере. | |
|
|
|
|
|
|
|
для: confirm
(14.03.2014 в 00:20)
| | когда я захожу на этот форум, я не ввожу ни пароль ни логин и вижу приветствие здравствуйте Danga. Понятное дело, что логин с паролем ( или его идентификатором) хранится у меня на компе в куках. На моем сайте тоже так было сделано. Но с недавнего времени что-то испортилось и теперь пользователь должен вводить каждый раз логин с паролем. В чем причина - не пойму | |
|
|
|
|
|
|
|
для: 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"]. Это такая интересная фича, когда для доменов первого уровня можно "вот так", а для остальных такое "не прокатит". | |
|
|
|
|
|
|
|
для: confirm
(14.03.2014 в 00:20)
| | когда я захожу на этот форум, я не ввожу ни пароль ни логин и вижу приветствие здравствуйте Danga. Понятное дело, что логин с паролем ( или его идентификатором) хранится у меня на компе в куках. На моем сайте тоже так было сделано. Но с недавнего времени что-то испортилось и теперь пользователь должен вводить каждый раз логин с паролем. В чем причина - не пойму | |
|
|
|
|
|
|
|
для: danga
(14.03.2014 в 00:41)
| | проблема не в том, что печатать, а пролема в том, что я теперь вообще не могу получить входную инфу из куков пользователя. Если у него куки отключены, то и пусть вводит логин с паролем каждый раз. Но если включены, то почему я не могу ее достать? В чем ошибка? Даже тест не работает, простое echo $_COOKIE['login'] | |
|
|
|
|