Подскажите пожалуйста
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 разные страницы.
И 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/.../..., а у тебя на компе клиента в куках...типа 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
Так авторизую пользователя при переходе по страницам в том же файле
Так я удаляю данные о пользователе в /site/adm/index.php
Так авторизую пользователя при переходе по страницам в /site/adm/index.php
Так я удаляю данные о пользователе в /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 написал(а):
По поводу
Вы правы, должен and стоять - заметил только когда сообщение писал (но это не особо важно)
Написана админка отдельно от сайта (нет общих файлов), общая только БД
Хотелось сделать чтоб при входе в админку, автоматически входило и на сайт (и наоборот) - это все работает, а вот выход не работает.
Если авторизуюсь на сайте, то из админки выйти не могу, а если авторизуюсь в админке, то выходит везде где надо
Я на сайте куки присваиваю сессии
Потому что при авторизации пользователь мог поставить галочку - запомнить
Вот я и проверяю, если есть куки, то я их продлеваю и присваиваю их сессии, а потом работаю с сессией
В админке такого нет потому, что там нет галочки запомнить и при авторизации значения записываются сразу в куки
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'] разные вещи
сами куки и $_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. Вот они возможно и ловятся вот здесь хотя сами куки удалены:
куки - файлы у клиента, $_COOKIE['id'] - переменная на сервере, когда через setcookie удаляешь куки у клиента до тех пор пока браузер запущен $_COOKIE['id'] существует, удалить ее можно через unset. Вот они возможно и ловятся вот здесь хотя сами куки удалены:
Цитата |
if(isset($_COOKIE['id']) or isset($_COOKIE['hash'])){ |
Спустя 5 часов, 22 минуты, 8 секунд (20.07.2012 - 20:15) Ser18 написал(а):
Через unset тоже не работает