[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Удаление куки
Ser18
Здравствуйте

Подскажите пожалуйста

http://localhost/site - на этой странице авторизуюсь, после обновляю страницу http://localhost/site/adm - тоже авторизовалась

При попытке удалить куку так http://localhost/site/adm/index.php?user=exit
Код удаления
setcookie('id', '', time() - (60*60*24*7), $_SERVER['SERVER_NAME']);

Кука не удаляется

Удаляется только здесь http://localhost/site/
Код удаления
setcookie('id', '', time() - (60*60*24*7), $_SERVER['SERVER_NAME']);


Почему так?
Я же вроде задаю четвертым параметром, чтоб были удалены все куки с таким именем по адресу localhost



Спустя 17 минут, 56 секунд (19.07.2012 - 13:13) kamanch написал(а):
Просто setcookie('id', '')

И Cookies устанавливются не для страницы, а для сайта целиком. В твоем случае для localhost.
И все равно, на какой странице кукис установили, на какой его прочитали и на какой его удалили. Это могут быть 3 разные страницы.

Спустя 21 минута (19.07.2012 - 13:34) Ser18 написал(а):
Цитата (h.n.81 @ 19.07.2012 - 13:13)
И Cookies устанавливются не для страницы, а для сайта целиком. В твоем случае для localhost.
И все равно, на какой странице кукис установили, на какой его прочитали и на какой его удалили. Это могут быть 3 разные страницы.

Я тоже так думал

Но все мои эксперименты показали что

если кука создана localhot/site , то она создана для localhot/site/.../... , но удалить ее из localhot/site/adm/ нельзя

а если создана для localhot/site/adm/ , то она создана для localhot/site/.../... и удалить ее из localhot/site/ можно

Я попробовал как вы написали. Не работает

Спустя 22 минуты, 32 секунды (19.07.2012 - 13:57) Winston написал(а):
setcookie('id', '', time() - (60*60*24*7), '/');

Спустя 14 минут, 29 секунд (19.07.2012 - 14:11) Ser18 написал(а):
Цитата (Winston @ 19.07.2012 - 13:57)
setcookie('id', '', time() - (60*60*24*7), '/');

Так совсем не работает

Спустя 1 час, 40 минут, 9 секунд (19.07.2012 - 15:52) GET написал(а):
Ser18

Кука привязана к конкретному сайту и хранится она не на сервере...т.е. localhot/site/.../..., а у тебя на компе клиента в куках...типа C:/Documents and Settings/Admin/Cookies

Цитата
если кука создана localhot/site , то она создана для localhot/site/.../... , но удалить ее из localhot/site/adm/ нельзя


Как такое возможно? site - рабочий каталог сайта? Как ее вообще можно оттуда удалить и как она туда может попасть? Может ты путаешь c переменной $_COOKIE.

Спустя 1 час, 59 минут, 13 секунд (19.07.2012 - 17:51) Ser18 написал(а):
Я знаю что она хранится у клиента и отсылается пи каждом запросе

Так я удаляю данные о пользователе в /site/index.php

if(isset($_GET['user']) and $_GET['user'] == 'exit'){
setcookie('id', '', time() - (60*60*24*7));
setcookie('hash', '', time() - (60*60*24*7));
unset($_SESSION['id']);
unset($_SESSION['hash']);
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

Так авторизую пользователя при переходе по страницам в том же файле
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){
setcookie('id', $_COOKIE['id'], time() + (60*60*24*7));
setcookie('hash', $_COOKIE['hash'], time() + (60*60*24*7));
$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['hash'] = $_COOKIE['hash'];
}

if(isset($_SESSION['id']) or isset($_SESSION['hash'])){
$res_verifier_user = mysql_query("SELECT `user_name`
FROM `users` WHERE `user_id`='"
.(int)$_SESSION['id']."'
AND
`user_hash`='"
.mysql_real_escape_string($_SESSION['hash'])."'");
$row_verifier_user = mysql_num_rows($res_verifier_user);
if($row_verifier_user > 0){
$user_autor = true;
$row_user = mysql_fetch_assoc($res_verifier_user);
}else{
unset($_SESSION['id']);
unset($_SESSION['hash']);
header("Location: index.php");
exit();
}
}

Так я удаляю данные о пользователе в /site/adm/index.php
if(isset($_GET['exit']) and $_GET['exit'] == 'adm'){
setcookie('id', '', time() - (60*60*24*7));
setcookie('hash', '', time() - (60*60*24*7));
unset($_SESSION['id']);
unset($_SESSION['hash']);
header("Location: index.php");
exit();
}

Так авторизую пользователя при переходе по страницам в /site/adm/index.php
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){
$res_verifier_user = mysql_query("SELECT COUNT(*)
FROM `users` WHERE `user_id`='"
.(int)$_COOKIE['id']."'
AND
`user_hash`='"
.mysql_real_escape_string($_COOKIE['hash'])."'
AND
`id_rang_user` = 1"
);
$row_verifier_user = mysql_fetch_array($res_verifier_user);
if($row_verifier_user[0] > 0){
$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['hash'] = $_COOKIE['hash'];
}else{
unset($_SESSION['id']);
unset($_SESSION['hash']);
setcookie('id', '', time() - (60*60*24*7));
setcookie('hash', '', time() - (60*60*24*7));
header("Location: index.php");
exit();
}
}


Спустя 11 часов, 15 минут, 17 секунд (20.07.2012 - 05:06) GET написал(а):
Цитата
if(isset($_GET['user']) and $_GET['user'] == 'exit'){
setcookie('id', '', time() - (60*60*24*7));
setcookie('hash', '', time() - (60*60*24*7));
unset($_SESSION['id']);
unset($_SESSION['hash']);
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}

	unset($_COOKIE['id'],$_COOKIE['hash']);
???


Цитата
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){
setcookie('id', $_COOKIE['id'], time() + (60*60*24*7));
setcookie('hash', $_COOKIE['hash'], time() + (60*60*24*7));
$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['hash'] = $_COOKIE['hash'];
}


Почему or, когда нужно && т.е. if(isset($_COOKIE['id'],$_COOKIE['hash']))
и вообще для чего это?

Цитата

$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['hash'] = $_COOKIE['hash'];


когда здесь можно сразу $_COOKIE['id'] вставлять
как вот здесь:
Цитата
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){

только вот так:

if(isset($_COOKIE['id'],$_COOKIE['hash'])){


мне кажется у тебя что-то неправильно с архитектурой.

Вот этот блок, отловли куки и дальнейшая авторизация, как и просто авторизация, должна находится в главном index.php. Непонятно, что это значит:
Так авторизую пользователя при переходе по страницам в том же файле
и
Так авторизую пользователя при переходе по страницам в /site/adm/index.php

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

Спустя 7 часов, 7 минут, 37 секунд (20.07.2012 - 12:14) Ser18 написал(а):
По поводу
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){


Вы правы, должен and стоять - заметил только когда сообщение писал (но это не особо важно)

Написана админка отдельно от сайта (нет общих файлов), общая только БД
Хотелось сделать чтоб при входе в админку, автоматически входило и на сайт (и наоборот) - это все работает, а вот выход не работает.
Если авторизуюсь на сайте, то из админки выйти не могу, а если авторизуюсь в админке, то выходит везде где надо

Я на сайте куки присваиваю сессии
$_SESSION['id'] = $_COOKIE['id'];
$_SESSION['hash'] = $_COOKIE['hash'];


Потому что при авторизации пользователь мог поставить галочку - запомнить
Вот я и проверяю, если есть куки, то я их продлеваю и присваиваю их сессии, а потом работаю с сессией

В админке такого нет потому, что там нет галочки запомнить и при авторизации значения записываются сразу в куки

Спустя 1 час, 21 минута, 30 секунд (20.07.2012 - 13:35) GET написал(а):
Цитата
if(isset($_GET['user']) and $_GET['user'] == 'exit'){
setcookie('id', '', time() - (60*60*24*7));
setcookie('hash', '', time() - (60*60*24*7));
unset($_SESSION['id']);
unset($_SESSION['hash']);
header("Location: ".$_SERVER['HTTP_REFERER']."");
exit();
}


когда удаляешь $_SESSION['id'], а разве $_COOKIE['id'] не остается?, который где-нибудь ниже ловится

Спустя 37 минут, 30 секунд (20.07.2012 - 14:13) Ser18 написал(а):
Так я и куки удаляю

setcookie('id', '', time() - (60*60*24*7));
setcookie('hash', '', time() - (60*60*24*7));


Длительность жизни куки, текущее время минус неделя

Спустя 32 минуты, 31 секунда (20.07.2012 - 14:45) GET написал(а):
Ser18

сами куки и $_COOKIE['id'] разные вещи

Спустя 4 минуты, 17 секунд (20.07.2012 - 14:49) Ser18 написал(а):
Цитата (A.B.C. @ 20.07.2012 - 14:45)
Ser18

сами куки и $_COOKIE['id'] разные вещи

Честно говоря впервые слышу

Раньше всегда удалял как выше указано, все работало

Вечером попробую ваш вариант

Спустя 3 минуты, 15 секунд (20.07.2012 - 14:53) GET написал(а):
Ser18

куки - файлы у клиента, $_COOKIE['id'] - переменная на сервере, когда через setcookie удаляешь куки у клиента до тех пор пока браузер запущен $_COOKIE['id'] существует, удалить ее можно через unset. Вот они возможно и ловятся вот здесь хотя сами куки удалены:

Цитата
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){


Спустя 5 часов, 22 минуты, 8 секунд (20.07.2012 - 20:15) Ser18 написал(а):
Через unset тоже не работает
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.