Login script - cookie проблем

fbian

Registered
Значи да обясня накратко:
Става въпрос за login скрипт,който работи на следният принцип - ако потребителя е избрал Запомни ме,му сетвам 2 cookie-та,а ако не е,му сетвам 2 сесии.Искам да направя проверка с 1 if,ако не са сетнати или 2-те сесии или 2-те cookie-та да редиректвам потребителя към друга страница.
Ето какво написах аз обаче не работи...явно бъркам някъде в логиката и в момента не си виждам грешката и затова ви пиша.
PHP:
if((!isset($_SESSION['id']) && !isset($_SESSION['name'])) OR (!isset($_COOKIE['id']) && !isset($_COOKIE['name']))) die("<meta http-equiv='refresh' content='0;url=index.php'>");
 
if((!isset($_SESSION['id']) && !isset($_SESSION['name'])) || (!isset($_COOKIE['id']) && !isset($_COOKIE['name']))) die("<meta http-equiv='refresh' content='0;url=index.php'>");

което значи.

ако това и това условие НЕ е изпълнено ИЛИ това и това условие НЕ е изпълнено дава грешка
 
PHP:
if(!isset($_SESSION['id']) && !isset($_SESSION['name'])) {
	header("Location: index.php");
} elseif (!isset($_COOKIE['id']) && !isset($_COOKIE['name'])) {
	header("Location: index.php");
}
 
critrate каза:
if((!isset($_SESSION['id']) && !isset($_SESSION['name'])) || (!isset($_COOKIE['id']) && !isset($_COOKIE['name']))) die("<meta http-equiv='refresh' content='0;url=index.php'>");

което значи.

ако това и това условие НЕ е изпълнено ИЛИ това и това условие НЕ е изпълнено дава грешка
Е добре аз съм използвал OR вместо ||,което е същото.Или греша?
П.С - Пак не работи.Значи да обясня:
В индекса правя проверка,ако тези неща са сетнати - препращам към страница.

PHP:
if((isset($_SESSION['id']) && isset($_SESSION['name'])) OR (isset($_COOKIE['id']) && isset($_COOKIE['name']))) die("<meta http-equiv='refresh' content='0;url=page.php'>");

Ако не са и се опитам да вляза в тази страница правя тези проверки,за които става въпрос горе.И сега проблема е,че се получава един постоянен редирект всяка секунда,когато се опитам да заредя адреса на тази страница.Ако може да ми дадете други предложения как да оправя тази проверка ще съм благодарен.
 
Защо не използваш и в двата случая бисквитки, като при избиране на опция "запомни" слагаш примерно 30 дни, а ако не е избрана - 0. Така като се затвори браузъра те ще се изтрият.
 
fbian каза:
critrate каза:
if((!isset($_SESSION['id']) && !isset($_SESSION['name'])) || (!isset($_COOKIE['id']) && !isset($_COOKIE['name']))) die("<meta http-equiv='refresh' content='0;url=index.php'>");

което значи.

ако това и това условие НЕ е изпълнено ИЛИ това и това условие НЕ е изпълнено дава грешка
Е добре аз съм използвал OR вместо ||,което е същото.Или греша?
П.С - Пак не работи.Значи да обясня:
В индекса правя проверка,ако тези неща са сетнати - препращам към страница.

PHP:
if((isset($_SESSION['id']) && isset($_SESSION['name'])) OR (isset($_COOKIE['id']) && isset($_COOKIE['name']))) die("<meta http-equiv='refresh' content='0;url=page.php'>");

Ако не са и се опитам да вляза в тази страница правя тези проверки,за които става въпрос горе.И сега проблема е,че се получава един постоянен редирект всяка секунда,когато се опитам да заредя адреса на тази страница.Ако може да ми дадете други предложения как да оправя тази проверка ще съм благодарен.

Погледнали моят пост ?
 
Да...извинявай,че не го коментирах,но и така не работи.
П.С - madmax,така ми е ясно как ще стане,но искам по начина,който съм обяснил.Все пак благодаря за идеята.
Моля за други предложения,как може да стане...
 
PHP:
if ((isset($_SESSION['id']) && isset($_SESSION['name'])) OR (isset($_COOKIE['id']) && isset($_COOKIE['name'])))
{
//нещо друго
}
else
{
echo"<meta http-equiv='refresh' content='0;url=index.php'>";
}
 
dakata__92 каза:
PHP:
if ((isset($_SESSION['id']) && isset($_SESSION['name'])) OR (isset($_COOKIE['id']) && isset($_COOKIE['name'])))
{
//нещо друго
}
else
{
echo"<meta http-equiv='refresh' content='0;url=index.php'>";
}
Не е това,което ми трябва...
 
Първото което трябва да направиш е да провериш дали е чекнато - Запомни ме и ако е след натискането на Вход създаваш бисквитка, ако пък не е чекнато създаваш сесия.
Това става по следния начин:

HTML:
<input type="checkbox" name="zapomnime" value="zapomnime"/>

И правиш следната проверка дали е чекнато.

PHP:
if(isset($_POST['zapomnime']) == 'zapomnime') {
//Тук създаваш бисквитка
} else {
//Тук създаваш сесия
}

Всички тези проверки ще ги направиш във проверката която проверява дали е натиснат бутона Вход

Относно първият ти пост ето това
"ако не са сетнати или 2-те сесии или 2-те cookie-та да редиректвам потребителя към друга страница."
него разбрах много добре, били се изказал по друг начин.
Защото ако примерно 2те сесси не са сетнати фактически ще бъдат 2те бисквитки сетнати и обратното, но пък ако и 2те неща не са сетнати, то това вече не се отнася до този код ами трябва да провериш дали изобщо потребителя се е логнал.
 
Добре,това ми е ясно и съм си го написал всичко,както трябва.Интересува ме как да направя тази проверка...И да,ако това ще ви насочи по-точно: Искам да проверявам дали потребителя е логнат..дали има или 2-те сесии или 2-те бисквитки и ако ги няма да го препращам към индекса.
 
Еми при проверката за натиснат бутон вход си пишеш онази проверка кяото ти написах в предния си пост, а кгоато проверяваш дали потребителя се е логнал правиш следната проверка

PHP:
if(isset($_SESSION['id']) && isset($_SESSION['name']) || isset($_COOKIE['id']) && isset($_COOKIE['name'])) {
//кодът ако потребителя е логнат
} else {
	header("Location: index.php");
}

Ако и това не е това което искаш вече не знам :D

EDIT: забравих да попитам нещо. За какво имаш 2 сесии не ти ли е достатъчна сесията с името на потребителя? само си усложняваш живота
 
@fbian вземи си направи цябостна проверка на кода и на логиката на проверката, защото това което искаш се прави с проверката която колегата в предния пост ти написа, в поста който аз ти написах и обясненията от другите форумни дейци. Тази проверка можеш да я направиш по много мнооого начини и вариации на един прост код. Провери дали си сетваш и съсдаваш правилно бисквитките и сесиите, за да не се получава това странно преминаване в else, което предполагам, че ти се получава :)
 

Горе