访问$ _SESSION会破坏Firefox中的视频流吗?

时间:2012-07-13 11:41:51

标签: php video-streaming

在我的一个Zend Framework控制器中,我想通过nginx传输mp4视频。我把它设置成这样:

    public function streamAction() {

        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender(TRUE);
        if ($this->view->user) { //<--if I skip this check - everything works fine
            $this->getResponse()
                ->setHeader('Content-Disposition', 'inline; filename=video.mp4')
                ->setHeader('X-Accel-Redirect', '/media/video/video.mp4')
                ->setHeader('Content-type', 'video/mp4')
                ->setHeader('Content-length', '2219550244')
            ;
        }
    }

在早期的preDispatch插件中,我为视图设置了用户属性:

...
$view = $layout->getView();
$user = Application_Model_User::get_auth_user(); // here I check the usual Zend_Auth `hasIdentity()`
$view->user = $user;
...

但是我在哪里查看用户身份并不重要,如果我检查它 - 视频流在Firefox中没有效果(它在text/html decoder上抱怨)和Opera,但仍可在Chrome中使用。< / p>

如果调用了Zend_Auth hasIdentity,我认为视频会输出一些内容。但我真的不明白:我在插件的早期做检查,只是将结果分配给一个视图属性。如果我在设置响应标头之前没有检查属性 - 一切正常。如果我检查视图属性 - 那么流已损坏,但如何?

此外,使用Zend安全系统是否有像这样的视频流的做法?

更新

嗯,实际上Zend_Auth不是导致腐败的原因,它可以访问$_SESSION

...
if ($_SESSION) {
    $this->getResponse()
        ->setHeader('Content-Disposition', 'inline; filename=video.mp4')
        ->setHeader('X-Accel-Redirect', '/media/video/video.mp4')
        ->setHeader('Content-type', 'video/mp4')
        ->setHeader('Content-length', '2219550244')
    ;
}

以上也不会在Firefox和Opera中提供流。

更新2

我已将代码简化为4行的php文件:

<?php

session_start();

if (isset($_SESSION['Zend_Auth'])) { // same with $_COOKIE['PHPSESSID']
    header('Content-type: video/mp4');
    readfile('/home/user/Videos/video.mp4');
}

如果我删除了支票(或检查不存在的密钥,如$_SESSION['rubbish'] ),那么在Firefox中流是可以的。问题出在php会话中,因此ZF不受怀疑。

0 个答案:

没有答案