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 :: Работа с куки и сессиями

 PHP.SU

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


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

> Описание: Работа с куки и сессиями
3d_killer
Отправлено: 20 Января, 2014 - 13:35:09
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




Не пойму в чем проблема пробую сделать авторизацию по куки, если авторизован пользователь то куки не используются сразу прилагаю код (тест просто)
login.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $user="123";
  4. setcookie("user", $user,0,'/');                                        
  5. echo("<meta http-equiv='refresh' content='0; url=/' />");
  6. ?>
  7.  

logout.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. setcookie("user", "", 0,'/'); //Удаляем
  4. echo("<meta http-equiv='refresh' content='1; url=/' />");
  5. ?>
  6.  

в самом индексе:
PHP:
скопировать код в буфер обмена
  1.  
  2. public function __construct() {
  3.     global $DBH;
  4.     if ($_SESSION['user'] == NULL)
  5.         {
  6.             //Проверим куки
  7.             if (empty($_COOKIE["user"]))
  8.                 {
  9.                     //Пользователь не залогинен
  10.                 }
  11.             else
  12.                 {
  13.                     $STH = $DBH - > prepare("SELECT * FROM table_users WHERE control_summ=:control_summ AND activation=1 LIMIT 1");
  14.                     $STH - > bindParam(':control_summ', $_COOKIE["user"]);
  15.                     $STH - > execute();
  16.                     if ($STH - > rowcount() > 0)
  17.                         {
  18.                             //Пользователь есть
  19.                             $this - > user = $STH - > fetch();
  20.                             $_SESSION['user'] = $this - > user;
  21.                         }
  22.                     else
  23.                         {
  24.                             //
  25.                         }
  26.                 }
  27.         }
  28.     else
  29.         {
  30.             //ничего не делаем пользователь залогинен
  31.             $this - > user = $_SESSION['user'];
  32.         }
  33.     }
  34.  

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

(Отредактировано автором: 20 Января, 2014 - 14:04:34)

 
My status
 Top
esterio
Отправлено: 20 Января, 2014 - 13:39:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




почему не использовать сессии. Туда же зразу и загнать всю инфу о юзере
 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 13:43:11
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




так в сессии и есть просто в куки как бы флаг сидит логинить или нет пользователя при входе на сайт
(Добавление)
не вставляется нормально отредактированный код в индексе который там по коду видно
 
My status
 Top
esterio
Отправлено: 20 Января, 2014 - 13:46:42
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Тоесть логинить не логинить. Незнаю знакомы ли Вы с тем как работают сессии, но там также есть кука (по дефолту PHPSESSID), которая также жива только на время сеанса (час ее жизни также равно 0 по дефолту). Загнали в массив все данные о пользователе. Ну и проверка только isset
 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 13:51:49
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




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

(Добавление)
я пока не говорю о времени жизни сессии или куки необходимо чтобы кнопки вход и выход работали безотказно не как к сожелению сейчас
 
My status
 Top
esterio
Отправлено: 20 Января, 2014 - 14:03:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Также следующие ошыбки
3d_killer пишет:
global $DBH;

глобальние переменные плохо
3d_killer пишет:
if ($_SESSION['user'] === NULL) {

или is_null
3d_killer пишет:
$this -> user = $_SESSION['user'];

здесь без пробела


Но еще раз настою на своем. Чем работа с сессией отличаеться от кук.
Можно ж сделать так
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. if(isset($_SESSION['user_data']))
  4.         $user_data = $_SESSION['user_data'];
  5. else
  6.         $user_data = false;
  7.  
  8. if($user_data)
  9.         echo 'USER IS LOGIN';
  10. else
  11.         echo 'USER IS GUEST';
  12.  
  13. // Login
  14. $_SESSION['user_data'] = array(); // PUT FROM SQL

не стоит забивать, что ето всего-лишь пример
 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 14:06:32
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




а как без глобальных в классе?
PHP:
скопировать код в буфер обмена
  1.  
  2. class MY_caller
  3.         {
  4.                 var $user=null; //Пользователь
  5.                 var $count_product=0; //Количество товаров в корзине
  6.                 var $back = array();
  7.                 public function __construct()
  8.                         {
  9.                                 global $DBH;
  10.  
 
My status
 Top
teddy
Отправлено: 20 Января, 2014 - 14:08:22
Post Id


Участник


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


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




после bind_param сделайте var_dump($_COOKIE['user']);
если увидите там NULL(если не NULL то показывайте каков результат)

то походу у Вас в БД есть запись там где control_summ равно NULL, поэтому и возвращается массив.

3d_killer пишет:
а как без глобальных в классе?

сделайте класс для работы с БД как синглтон и цепляйте instance там где он нужен

PHP:
скопировать код в буфер обмена
  1. class someclass{
  2.     private $_dbh;
  3.    
  4.     public function __construct(){
  5.         $this->_dbh = DBConn::getInstance();
  6.     }
  7.  
  8.     public function __destruct(){
  9.          unset($this->_dbh);
  10.     }
  11. }

(Отредактировано автором: 20 Января, 2014 - 14:12:42)

 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 14:12:13
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




исправление указанных ошибок не помогает все равно при логауте
в сессии нет ничего проверил так:

FireBug смотрю куки установленной нет,
и визуально по условиям отображение блоков выглядит так, как будто пользователь не залогинен, но обновляю страницу:
куки нет,
блоки как у залогиненного,
<?php var_dump($_SESSION); ?> выдает массив данных пользователя
(Добавление)
если сделать var_dump($_COOKIE['user']); в классе то как раз выводит значение куки старое, но ее то не существует откуда она берется?

(Отредактировано автором: 20 Января, 2014 - 14:19:17)

 
My status
 Top
teddy
Отправлено: 20 Января, 2014 - 14:21:24
Post Id


Участник


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


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




3d_killer пишет:
если сделать var_dump($_COOKIE['user']); в классе то кака раз выводит значение куки старое, но ее то не существует откуда она берется?

3d_killer пишет:
setcookie("user", $user,0,'/');

обращаем внимание на четвертый параметр, это путь куда ставить куку... подозреваю что Вы $_COOKIE['user'] используйете по одному пути, а пытаетесь обнулить куку по другому пути.

Почистите все куки в браузере, измените сеткуки на

и попробуйте заново.

Если не выйдет то укажите одинаковый путь 4ым параметром и при авторизации и при логауте тот же самый путь или вот так

(Отредактировано автором: 20 Января, 2014 - 14:29:58)

 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 14:33:06
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




видимо да в данный момент почистил использую так:


Скорее всего изначально когда пробовал поставил без пути
единственное что не понял при

по какому пути считывается кука?
 
My status
 Top
teddy
Отправлено: 20 Января, 2014 - 14:41:56
Post Id


Участник


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


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




По глобальному... т.е не важно куда установлена кука(по какому пути)
var_dump($_COOKIE['user']); покажет содержимое независимо от пути если кука есть
 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 14:48:19
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




так если здесь

не указывать путь
при установке и при удалении, но скрипты установки и удаления находятся по разному пути то все будет работать или надо указывать какую то общую директорию?
 
My status
 Top
teddy
Отправлено: 20 Января, 2014 - 15:04:54
Post Id


Участник


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


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




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

(Отредактировано автором: 20 Января, 2014 - 15:05:20)

 
 Top
3d_killer
Отправлено: 20 Января, 2014 - 15:17:10
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




Попробую, спасибо большое
 
My status
 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