2012-01-10 17 views
7

Ho un'applicazione PHP che si basa ampiamente sulle sessioni. Stiamo valutando la possibilità di creare un'API per i nostri utenti. I nostri pensieri iniziali sono che gli utenti dovranno autenticarsi contro l'API con il loro indirizzo email, password e una chiave API (unica per ogni utente).Autenticazione e sessioni API PHP

Tuttavia, poiché l'applicazione corrente (inclusi i modelli) si basa ampiamente sulle sessioni utente, non sono sicuro dell'approccio migliore.

Partendo dal presupposto che una richiesta API è correttamente autenticato, sarebbe accettabile:

  • avvia la sessione per la chiamata API volta che l'utente è autenticato
  • Run modelli e tornare JSON/XML per l'utente
  • terminare la sessione

Ciò significa che la sessione viene creata un'istanza per ogni chiamata API, e poi subito arrossì. Va bene? O dovremmo considerare altre alternative?

+0

Si è corretto, l'API deve essere stateless e non utilizzare sessioni/cookie se possibile. Ma ciò può essere fatto facilmente, nessun problema. Dovresti riutilizzare un framework di autenticazione esistente, tuttavia, perché è davvero complesso. Ad esempio, dai un'occhiata a https://github.com/delight-im/PHP-Auth che è sia agnostico che indipendente dal database. Quindi inviare le credenziali con ogni richiesta e sul server (1) accedere, (2) eseguire il lavoro effettivo e infine (3) disconnettersi nuovamente. – caw

risposta

1

Nella mia esperienza di creazione di API, ho trovato che le sessioni durano solo per una richiesta e per ricreare le informazioni sulla sessione in ogni ciclo di esecuzione.

Questo ovviamente introduce un sovraccarico se l'istanza della sessione è significativa, tuttavia se si stanno solo controllando le credenziali con un database, dovrebbe essere OK. Inoltre, dovresti essere in grado di memorizzare in cache qualsiasi attività di sollevamento pesante in qualcosa come APC o memcache basata su un identificativo utente piuttosto che su una sessione che riduce il lavoro richiesto per ricreare una sessione, garantendo nel contempo l'autenticazione verificata in ogni richiesta.