Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с cookies

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Andruxa
Отправлено: 07 Ноября, 2013 - 15:58:11
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Помогите разобраться.
Делаю простую систему авторизации. Есть функция проверки полей формы:
PHP:
скопировать код в буфер обмена
  1. function chek_form_reg($name, $password ){
  2.     global $dom;
  3.      include "inc/config.php";
  4.      $name = htmlspecialchars(stripslashes($name));
  5.      $password = htmlspecialchars(stripslashes($password));          
  6.      if ($name =="") {
  7.          $error=$error. "<strong>Имя пользователя</strong> не может быть пустым !<br>";
  8.      }
  9.      elseif ((strlen($name) >= 2) and (strlen($name) <= 25)){
  10.          $name = stripslashes($name);
  11.          $name = html_entity_decode($name);
  12.          $name = strip_tags($name);        
  13.      }
  14.      else{
  15.        $error=$error. "Вы ввели не корректные данные в поле <strong>Имя пользователя</strong>!<br>";
  16.      }    
  17.      if( empty($password)){
  18.         $error=$error. "<strong>Пароль</strong> не может быть пустым!<br>";
  19.      }
  20.      if ( !empty($password) and strlen($password)<=2){
  21.         $error=$error. "<strong>Пароль</strong> должен быть больше 2 символов!<br>";
  22.      }    
  23.      // выводим сообщение об ошибках
  24.     if (!empty($error)){
  25.         echo "<div class='error'> <p>Ошибка!</p><br>$error<br>";
  26.        // echo "<input class='butom_err' onclick='window.history.back();'  value='Вернуться'/></br></div>";
  27.     }
  28.     elseif($name==$admin_login and md5($password)==$admin_password){
  29.         setcookie("dostup", "ok", time()+3600);
  30.        echo"<META HTTP-EQUIV=REFRESH CONTENT='1; URL=$dom/module'>";        
  31.         echo "Все правильно, авторизуем";
  32.     }
  33.     else{  
  34.         echo"Какая то ошибка<br>";
  35.     }
  36.   return $error;      
  37. }


Далее делаю проверку вводимых полей и записываю все в cookies:
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['go']) ){
  2. chek_form_reg($_POST['login'], $_POST['password']);  
  3. }


Далее хочу сделать "выход":
PHP:
скопировать код в буфер обмена
  1. if ($url[3]=="exit"){
  2.     setcookie ("dostup", "");    
  3.     echo"<META HTTP-EQUIV=REFRESH CONTENT='0; URL=$dom/module'>";
  4.     echo "Уничтожаем сессиию";
  5. }

При нажатие на ссылку "Выход" почему то не обнуляется Недовольство, огорчение

CODE (htmlphp):
скопировать код в буфер обмена
  1. array (size=2)
  2.   'dostup' => string 'ok' (length=1)
  3.   'PHPSESSID' => string 'c9sj47td7nhedejv63lufv0872' (length=26)


Что то я делаю не то, это точно, но что пока не могу разобраться.
И еще попутный вопрос:
 
 Top
teddy
Отправлено: 07 Ноября, 2013 - 16:06:45
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Я не вижу редиректра в вашей функции. Я думаю вы авторизовались и просто нажимаете f5 и постоянно видите что куки существуют.

А так как вы нажимаете f5, $_POST запрос отправляется заново и так как данные были введены верно, ваша функция для авторизации вызывается заново и снова устанавливает куку

И ещё один момент, сделайте print_r($url); возможно спутали номер элемента массива. Посмотрите под каким индексом находится 'exit' (не забываем что счет идет с нуля)
 
 Top
Andruxa
Отправлено: 07 Ноября, 2013 - 16:20:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Нет f5 я не нажимаю, я заново захожу на страницу с формой .
PHP:
скопировать код в буфер обмена
  1. if ($_COOKIE['dostup']=="ok"){
  2. echo"Выход";
  3. }
  4. else{
  5. echo"Форма";
  6. }

По поводу редиректа в функции честно не очень понял, что имеется в виду ?

Мысли в слух Закатив глазки
PHP:
скопировать код в буфер обмена
  1.     if (isset($_POST['go']) ){
  2.     chek_form_reg($_POST['login'], $_POST['password']);  
  3.     }

При нажатие на кнопку "войти" запускается моя функция по проверке полей, если данные корректны, она должна записать cookies, если нет, выдать сообщение об ошибке.
Вопрос даже больше звучит, как убить эту cookies сессию? Для сессий есть функция session_destroy();
То что $url[3]="exit"; это точно , смотрю var_dumP ом, и тем более у меня появляется сообщение "Уничтозаем сессиию"

(Отредактировано автором: 07 Ноября, 2013 - 16:22:51)

 
 Top
teddy
Отправлено: 07 Ноября, 2013 - 16:35:12
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




Andruxa пишет:
По поводу редиректа в функции честно не очень понял, что имеется в виду ?

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

Странно... попробуйте после setcookie("dostup", "ok", time()+3600); написать

ну и кеш почистите если не поможет

(Отредактировано автором: 07 Ноября, 2013 - 16:54:28)

 
 Top
Kandiar
Отправлено: 07 Ноября, 2013 - 16:56:31
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Нояб. 2013  


Помог: 1 раз(а)




Сделайте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. if ($url[3]=="exit"){
  3.     setcookie ("dostup", "");    
  4.     header("Location: index.php"); // После выхода, делаем редирект к примеру на главную
  5.     exit;
  6. }
  7.  

(Отредактировано автором: 07 Ноября, 2013 - 16:57:20)

 
 Top
Andruxa
Отправлено: 07 Ноября, 2013 - 18:50:52
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




редирект есть!
PHP:
скопировать код в буфер обмена
  1.  echo"<META HTTP-EQUIV=REFRESH CONTENT='0; URL=$dom/module/adminka'>"; // такой мне больше нравится :) с header( иногда возникают траблы  

Kandiar - же говорю, что вижу сообщение
PHP:
скопировать код в буфер обмена
  1.     if ($url[3]=="exit"){
  2.         setcookie ("dostup", "");    
  3.         echo"<META HTTP-EQUIV=REFRESH CONTENT='0; URL=$dom/module'>";
  4.         echo "Уничтожаем сессиию";
  5.     }
и меня сразу перенаправляет...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB