Въпрос за система с регистрация и логин!

Styl3rbg

Registered
Имам система с сесии, но като излезна от браузъра и влезна пак, вече ме е изхвърлило от акаунта, как мога да направя така че това да не става тоест да сам логнат, докато не реша да натисна бутона Изход?
 
Бисквитки? Друг вариант е да запазваш в базата, че е отбелязано да пази.
 
Аз попринцип си запазвам нещо от сорта на hash, специални символи, който се генерират при регистрация и се запазват при потребителя.Ако кода е същия от бисквитката и в нея се съдържа потребителя, може да ползваш нещо от сорта на.

if(isset($_COOKIE['username']) && $_COOKIE['userhash_18giqwqu9'] == $row['user_specialhash'])
{
$_SESSION['username'] = $_COOKIE['username'];
}
 
alex3 каза:
Аз попринцип си запазвам нещо от сорта на hash, специални символи, който се генерират при регистрация и се запазват при потребителя.Ако кода е същия от бисквитката и в нея се съдържа потребителя, може да ползваш нещо от сорта на.

if(isset($_COOKIE['username']) && $_COOKIE['userhash_18giqwqu9'] == $row['user_specialhash'])
{
$_SESSION['username'] = $_COOKIE['username'];
}

Няма да стане така. Всъщност ще стане, но ще държи доколкото е сесията валидна, а не доколкото си задал да е валидна бисквитката. Даже е по зле. Ако имаш повечко посетители ще ги изхвърля на 10 минути, всъщност и зависи къде го слагаш.
 
Karcho каза:
alex3 каза:
Аз попринцип си запазвам нещо от сорта на hash, специални символи, който се генерират при регистрация и се запазват при потребителя.Ако кода е същия от бисквитката и в нея се съдържа потребителя, може да ползваш нещо от сорта на.

if(isset($_COOKIE['username']) && $_COOKIE['userhash_18giqwqu9'] == $row['user_specialhash'])
{
$_SESSION['username'] = $_COOKIE['username'];
}

Няма да стане така. Всъщност ще стане, но ще държи доколкото е сесията валидна, а не доколкото си задал да е валидна бисквитката. Даже е по зле. Ако имаш повечко посетители ще ги изхвърля на 10 минути, всъщност и зависи къде го слагаш.

В user_specialhash няма да се записва сесията, а някакъв уникален код за всеки потребител, който си стой в таблицата с информацията за потребителя.За всеки потребител е един и не се сменя, така че ако в cookie е записан същия уникален код като на потребителя, ще го логва.Аз му давам по-опростен код за да схване смисъла, иначе ще си сложи и проверка дали е isset $_SESSION['username'], за да не се презаписва всеки път.
 
Не е хубаво да не се сменя. Най-добре е при всеки вход да се генерира нов код, който да се обновява в полето в базата данни и да се добавя бисквитка, под някакво име, което има стойност този hash. След което, ако потребителя няма сесия, има бисквитка (only) да проверява и ако съвпада този hash с базата данни да си слага пак сесия.
 
Аз използвам друг вариант.
При вход има checkbox за запомняне.
Съответно то може и да се махне де.
И при вход се създава една бисквитка която е валидна една година.
След това проверявам ако има бисквитка username и ако има автоматично създава сесия.

При успешен логин:

PHP:
session_start();
ob_start();
setcookie("username", $username, time()+365*24*3600);
$_SESSION['username'] = $username;

И след това да речем в header на сайта:

PHP:
session_start();
ob_start();
if (!isset($_SESSION['username']))
{
if (isset($_COOKIE['username']))
{
$_SESSION['username'] = $_COOKIE['username'];
}
}

Използвам го и работи отлично ;)

EDIT:

то може да се остави и само бисквитката , но тъй като аз работя със сесий и за да не си преправям 1000 файла реших да добавя бисквитка без да си махам сесийте и в сайта си работя с $_SESSION['username'];
 

Back
Горе