2010-12-12 6 views
0

Je développe sur GAE en utilisant Resin, il semble que ma session PHP sur le site de production soit de courte durée et ne soit pas mise à jour (ie, faire des requêtes ne semble pas augmenter son expiration période). Local est très bien, tant que je ne ferme pas l'onglet, la session persiste.Resin Session dans Google App Engine

Un pointeur sur ce point? Mes utilisateurs sont frustrés car ils se sont très souvent des coups de pied :(

+0

Qu'est-ce que 'le site distant'? Utilisez-vous App Engine pour envoyer des demandes à un autre site distinct? –

+0

Désolé je voulais dire le site de production, mis à jour –

Répondre

1

Je pense que le code est le meilleur tutoriel :)

// global mem cache service handle 
$MEM_CACHE_SERVICE = NULL; 
// table to store session like information 
$MY_SESSION_TABLE = array(); 

function load_mcache($key) { 
    global $MEM_CACHE_SERVICE; 
    if (!$MEM_CACHE_SERVICE) { 
     import com.google.appengine.api.memcache.MemcacheServiceFactory; 
     import com.google.appengine.api.memcache.Expiration; 
     $MEM_CACHE_SERVICE = MemcacheServiceFactory::getMemcacheService(); 
    } 
    return $MEM_CACHE_SERVICE->get($key); 
} 

function save_mcache($key, $value, $cache_time) { 
    global $MEM_CACHE_SERVICE; 
    if (!$MEM_CACHE_SERVICE) { 
     import com.google.appengine.api.memcache.MemcacheServiceFactory; 
     import com.google.appengine.api.memcache.Expiration; 
     $MEM_CACHE_SERVICE = MemcacheServiceFactory::getMemcacheService(); 
    } 
    $expiration = Expiration::byDeltaSeconds($cache_time); 
    return $MEM_CACHE_SERVICE->put($key, $value, $expiration); 
} 

// unserializing array from mem cache 
// if nothing found like first time and after a minute, then add key to the table 
if (!($MY_SESSION_TABLE = unserialize(load_mcache($_REQUEST['JSESSIONID'])))) { 
    // save something to cache on first page load because we didnt have anything 
    $MY_SESSION_TABLE['key1'] = date('m/d/Y H:i:s'); 
    // using jsessionid as a mem cache key, serializing array and setting cache time to one minute 
    save_mcache($_REQUEST['JSESSIONID'], serialize($MY_SESSION_TABLE), 60); 
} 

// now my session table is available for a minute until its initialized again 
print_r($MY_SESSION_TABLE); 

Maintenant, pour une bonne fonctionnalité de session, vous devez ajouter ensemble et obtenir des méthodes ou encore mieux une petite classe pour le manipuler. Peu d'abstraction aux classes et vous pouvez choisir quel type de mécanisme de session utiliser avec la même bibliothèque sur différents scénarios d'applications web.