PHP:使用嵌入式视频播放器时,Android会丢失会话和Cookie信息

时间:2015-08-24 11:27:01

标签: php android html5 session video

在整天没有找到解决方案后,我在SO上试一试:

场景:客户端可以登录和访问视频文件。我使用PHP伪流(字节范围请求)提供视频文件。视频文件位于受保护的文件夹中。

设定:

  1. loading.php 提供html5视频嵌入代码:

    <video ...>
       <source src="videoprovider.php?secure=CODE" type="video/webm">
    </video>
    
  2. videoprovider.php 让代码找到合适的视频并以字节范围返回视频

  3. 两个PHP文件都会检查客户端是否已登录。为此,我在每个文件的开头使用modx:

    require_once DOCUMENT_ROOT.'modx/includes/config.inc.php';
    startCMSSession(); // does session_start()
    

    然后我可以访问登录时设置的$ _SESSION数据。

    一切都适用于桌面,但不适用于Android设备。 Android设备仅显示视频加载指示符并被卡住。

    我打印了$ _SESSION,发现只要Android尝试播放视频文件(几个范围字节请求),第一个请求就会说$ _SESSION就在那里,第二个请求说再没有$ _SESSION了。

    我无法进一步追踪错误。什么是Android的问题?为什么它可以阅读会话,然后不再阅读。


    一些注释:

    • 我已经正确链接了所有文件,没有404会破坏会话(至少不会在Web开发人员控制台中,不要 Android正在做什么)。

    • 调用startCMSSession();多次,对于每个视频范围请求,不应改变会话。

    • 适用于所有桌面浏览器。


    更新

    • 我尝试使用cookies,但发现连cookie都没有通过,因此它似乎不是与modx相关的问题,而是完整的Android问题。我相应更新了问题标题“Android失去了由MODx Evo创建的$ _SESSION?” “使用嵌入式视频播放器时,PHP:Android会丢失会话和Cookie信息”
    • 这可能是同样的问题:Android 2.3 doesn't pass cookie information for html5 audio tag Get request引用:
      

    问题是,浏览器本身并不发送音频标签请求,而是将其委托给stagefright。可悲的是,Stagefright(在Android 2.3上)根本不发送任何cookie ...

    那么如何解决这个问题? (我的测试设备是Android 4。)

0 个答案:

没有答案