0

在我的服务器中,一个 Symfony2 应用程序正在运行。

此外,服务器有一个文件夹,其中放置了一些 PHP 类。这些类用于实用目的,并由 http 调用使用(特别是通过使用我网站页面中的 AJAX)。例如,一个 PHP 类用于文件上传(见下图)。

当前使用 php 实用程序类的架构

http 调用应该由我的网页之一完成(一切都会好的),但也可以从外部网站完成。后一个 http 请求应该是恶意请求。

因此,我需要在 php 类中插入这样的代码来检查用户是否已登录(即使它没有特定的角色)。考虑到我正在使用 Symfony2,如何做到这一点?

PS:我强调必须在通用 PHP 类中进行控制,而不是在 Symfony2 控制器中!

提前致谢。

4

2 回答 2

2

我认为最好的方法是当你问谷歌时。有两种可能。您可以使用 Symfony2 或使用您的脚本。最好的方法是在 Symfony 应用程序中实现文件上传并调用它。

SF2 文档中有一个关于Security的完整部分。您应该仔细阅读它,然后您可以实施它。

如果没有身份验证,您将无法在 SESSION 中保护您的用户信息。但是如果你在 Symfony 上有一个登录名,你可以像这样设置一个 SESSION 变量:

$_SESSION['loggedOn'] = true;

然后在您的文件上传脚本中询问是否设置了会话。

session_start;
if($_SESSION['loggedOn'] == false) {
    exit();
}
于 2012-08-28T07:49:31.150 回答
0

我尝试使用常见的 PHP 解决方案,例如按照Stony的建议设置 Session 变量,但是 Symfony2 会话中有些东西我丢失了。即使在 Symfony2 控制器中定义了变量,$_SESSION对象似乎也不包含它。

因此,我尝试按照Stony的建议遵循“控制器方式” 。

以下是我所做的。假设必须通过 http 调用运行 PHP 类“FileUpload.php”。PHP 文件具有要使用的FileUpload类。就我而言,调用是通过 AJAX 完成的。因此,我应该做类似的事情:

<script>
  load('http://path/to/fileupload.php')
<script>

whereload()是用于 AJAX 调用的虚拟 Javascript 函数。

当然,最初的想法是在 FileUpload.php 中包含所有控件。我不能!所以呢?

很简单,在 Symfony2 中创建一个控制器。然后创建你的动作。例如

public function fileUploadAction(){
    //control if user is logged and has required role as usual with Symfony2
    $uploader = new \Path\To\\FileUpload();
    //do something with object uploader

    exit(0);//Symfony will not require an answer, but you did what you needed
}

当然,网页中的脚本也要更新:

<script>
  load("{{path('route_to_fileUploadAction')}}")
<script>

请记住将 FileUpload.php 放在安全文件夹中。

于 2012-08-28T14:02:59.673 回答