在我们的网站中,我们有一个登录按钮,只要有人登录按钮变为“注销”并且旁边会显示用户名。我们的服务器设置使用了Varnish,因此我们设计了一种方法,其中一些javascript执行POST,我们检查用户是否经过身份验证。
为了避免服务器开销,我认为只是创建一个位于网站root /checkuser.php中的脚本并尝试在那里读取会话变量(我们让Varnish不缓存此文件)会很简单。这样我们就可以绕过所有需要加载的类来检查这个用户会话。
然而,长话短说,checkuser.php中的会话总是空的。如果我用$ user-> getAttribute检查它是否有效。现在怎么样?
答案 0 :(得分:3)
好的,我明白了。 Symfony以自己的名义使用其会话。如果您想使用来自应用程序(或框架)外部的会话,您可以获得如下会话:
session_name('symfony');
session_start();
var_dump( $_SESSION );
当然,您没有在factories.yml
中重命名会话名称thx prodigitalson寻求帮助。
答案 1 :(得分:1)
更复杂(我不会说更好,因为如果你需要额外的功能它只会更好)这样做的方法就是做这样的事情:
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/)
答案 2 :(得分:0)
您使用的会话映射是什么?我相信Symfony使用一个命名空间,所以在会话的顶层没有任何东西......例如你可能有:
$_SESSION = Array(
symfony = Array(
sf_user => $userSessionValues
sf_debug => $debugValues
)
)
我不记得实际的结构,但是在$ _SESSION上做一个print_r或var_dump(来自sf只是为了确定)应该可以为你提供这片土地。