Сеансы Symfony вне приложения? - PullRequest
1 голос
/ 08 февраля 2010

На всем нашем сайте у нас есть кнопка входа в систему, когда кто-либо входит в систему, кнопка превращается в «выход из системы», и рядом с ней отображается имя пользователя. В нашей настройке сервера используется Varnish, поэтому мы разработали способ, при котором часть JavaScript выполняет POST, и мы проверяем, прошел ли пользователь проверку подлинности.

Чтобы избежать перегрузки сервера, я подумал, что было бы просто создать скрипт, который находится в корне сайта /checkuser.php, и попытаться прочитать там переменные сеанса (мы позволяем Varnish не кэшировать этот файл). Таким образом, мы можем обойти все классы, которые должны быть загружены только для проверки этого сеанса пользователя.

Однако, короче говоря, сессии в checkuser.php всегда пусты. Если я проверю с $ user-> getAttribute, это работает. И что теперь?

Ответы [ 3 ]

3 голосов
/ 08 февраля 2010

Хорошо, я понял.Symfony использует свои сессии под своим именем.Если вы хотите использовать сеансы вне вашего приложения (или фреймворка), вы можете получить сеансы примерно так:

session_name('symfony');
session_start();
var_dump( $_SESSION );

При условии, конечно, что вы не переименовали имя сеанса в factories.yml

Спасибо за помощь.

1 голос
/ 09 февраля 2010

Более сложный (я не скажу лучше, потому что лучше всего, если вам нужны дополнительные функции) способ сделать это - сделать что-то вроде этого:

require_once($_SERVER['DOCUMENT_ROOT'].'/../config/ProjectConfiguration.class.php');

$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false);
$context = sfContext::createInstance($configuration);

if ($context->getUser()->isSuperAdmin()) {
  "do something";
}

if ($context->getUser()->hasCredential('something')) {
  "do something else"
}

Преимущество этого способа заключается в том, что, как вы видите, вы можете использовать более сложные методы Symfony, а не просто просматривать необработанные данные сеанса.

(поднято с http://benlumley.co.uk/2009/05/24/hook-into-symfony-authentication-from-external-script-fckeditor/)

0 голосов
/ 08 февраля 2010

Какое отображение сеанса вы используете? Я полагаю, что Symfony использует пространство имен, поэтому на верхнем уровне сеанса ничего не бывает ... например, у вас может быть:

$_SESSION = Array(
  symfony = Array(
    sf_user => $userSessionValues
    sf_debug => $debugValues
  )
)

Я не помню фактическую структуру, но выполнение print_r или var_dump для $ _SESSION (из-за отказа от sf просто для уверенности) должно дать вам, так сказать, форму земли.

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