Подтвердить что ты не робот

PHP-сессии Войти с помнить меня

У меня есть система регистрации/входа в PHP с использованием PHP-сессий, которая отлично работает, я хочу, чтобы пользователь мог отметить меня, а затем они остаются в системе навсегда или по крайней мере неделю или что-то в этом роде.

Я предполагаю, что мне нужно сохранить cookie и проверить, я был смущен тем, что мне действительно нужно хранить в cookie. Если я сохраню идентификатор пользователя или имя пользователя, то не может ли кто-то просто использовать поддельный файл cookie для просмотра данных других пользователей?

Любое продвижение оценивается.

4b9b3361

Ответ 1

Небольшой пример того, что я часто использую

function setSession($username,$password,$cookie=null){
    // Other code for login ($_POST[]....)
    // $row is result of your sql query
    $values = array($username,$this->obscure($password),$row['id']);         
    $session = implode(",",$values);

    // check if cookie is enable for login
    if($cookie=='on'){
        setcookie("your_cookie_name", $session, time()+60*60*24*100,'/');
    } else {
        $_SESSION["your_session_name"] = $session;
    }
}

Ответ 2

Все, что вам нужно сделать, это расширить файл cookie сеанса PHP. Следующий пример расширяет файл cookie на 30 дней:

$params = session_get_cookie_params();
setcookie(session_name(), $_COOKIE[session_name()], time() + 60*60*24*30, $params["path"], $params["domain"], $params["secure"], $params["httponly"]);

Я думаю, что по вашему вопросу безопасности вы просто обеспокоены тем, как можно легко взломать ценности. Файлы cookie PHP-сессии имеют случайное значение и сохраняют его содержимое в файловой системе, поэтому вы должны быть в порядке.

Ответ 3

После успешного входа выполните:

$_SESSION['user_is_loggedin'] = 1;

$cookiehash = md5(sha1(username . user_ip));
setcookie("uname",$cookiehash,time()+3600*24*365,'/','.yoursite.com');

сохранить в sql:

$sql = "UPDATE `users` SET `login_session`='$cookiehash' WHERE `user_id`='$uid'";

чтобы проверить, зарегистрирован ли пользователь:

function CheckCookieLogin() {
    $uname = $_COOKIE['uname']; 
    if (!empty($uname)) {   
        $sql = "SELECT * FROM `users` WHERE `login_session`='$uname'";
        $_SESSION['user_is_loggedin'] = 1;
        $_SESSION['cookie'] = $uname;
        // reset expiry date
        setcookie("uname",$uname,time()+3600*24*365,'/','.yoursite.com');
    }
}

if(!isset($_SESSION['cookie']) && empty($_SESSION['user_is_loggedin'])) {
    CheckCookieLogin();
}