Autenticazione
Il server deve occuparsi dello stato (ad es. l'utente ha effettuato l'accesso o meno), non il client. Benché sia perfettamente corretto inviare a JSON informazioni sullo stato (ad esempio, si è effettuato l'accesso) tramite HTTPS, è il server che deve ricordare se l'utente in particolare è connesso o meno. Il server non può mai fidarsi del client.
Il modo in cui lo fai è usare una variabile di sessione sul server, cioè una variabile collegata a questo particolare utente, che tiene traccia su se è loggato o meno:
$_SESSION["loggedin"] = true;
Quindi ogni volta che l'utente richiede informazioni che dovrebbero essere disponibili solo per gli utenti registrati, è necessario verificare che questa variabile di sessione sia effettivamente vera. In questo modo non importa se qualcuno ha manipolato la tua risposta JSON - a meno che non abbiano fornito la password corretta il server non li visualizzerà come se fosse loggato.
Maggiori informazioni sulle sessioni in PHP qui e qui .
Un'altra cosa: se il tuo cliente detiene dati sensibili che non dovrebbero essere resi disponibili all'utente senza che il server la autentichi, allora questa è una situazione abbastanza diversa e dovresti prendere ulteriori precauzioni. Lo stesso vale se il client esegue azioni per conto dell'utente.
Invio di chiave nel POST
Something else I am doing is that I'm sending a key with the POST so that the PHP script will only run if its key and that key match.
Non sei sicuro di cosa stai dicendo qui. Questo potrebbe essere completamente superfluo, ma non sono sicuro di averlo capito correttamente.
Rotolare il proprio
Ricorda che fare un sistema di autenticazione completo non è facile. Ci sono molte insidie oltre a quelle trattate in questo post. Invece di eseguire il rollover, ti suggerirei di controllare se esiste un framework PHP esistente che puoi usare.