Ive получил систему регистрации / входа в PHP, используя PHP Sessions, которая работает отлично, я хочу, чтобы пользователь имел возможность отмечать меня, а затем они остаются в системе навсегда или по крайней мере неделю или что-то в этом роде.
Я предполагаю, что мне нужно сохранить cookie и проверить, я был смущен тем, что мне действительно нужно хранить в cookie. Если я сохраню идентификатор пользователя или имя пользователя, то не может ли кто-то просто использовать поддельный файл cookie для просмотра данных других пользователей?
Любое продвижение приветствуется.
Небольшой пример того, что я часто использую
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; } }
Все, что вам нужно сделать, это расширить файл 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-сессии имеют случайное значение и сохраняют его содержимое в файловой системе, поэтому вы должны быть в порядке.
После успешного входа выполните:
$_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(); }