Сеанс смолы в Google App Engine - PullRequest
0 голосов
/ 12 декабря 2010

Я разрабатываю для GAE с использованием Resin, похоже, что мой PHP-сеанс на производственном сайте недолговечен и не обновляется (то есть, выполнение запросов, похоже, не увеличивает его срок действия). Локально хорошо, пока я не закрываю вкладку, сеанс сохраняется.

Есть какие-нибудь указатели на это? Мои пользователи разочарованы тем, что их очень часто пинают: (

1 Ответ

1 голос
/ 27 февраля 2011

Я думаю, что код лучший учебник:)

// 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);

Теперь для правильной функциональности сеанса вам нужно добавить методы set и get или, что еще лучше, небольшой класс для его обработки. Небольшая абстракция к классам, и вы можете выбрать, какой механизм сеанса использовать с одной и той же библиотекой в ​​различных сценариях веб-приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...