3

我编写了一个 Web 应用程序,它通过 http 提供媒体文件以在 html5 音频元素中播放。在提供媒体文件之前,服务器会检查是否为 cookie 提供了当前 PHP 会话 ID,如下所示:

PHPSESSID=3u90bfmqepd14s4rvslmrv69d1

似乎 IE/Firefox/Chrome 都将 cookie 与对音频文件的请求一起发送,但是在 OSX Safari 中,请求是使用不同的用户代理字符串(包含“quicktime”)发送的,并且没有 cookie。这大概是因为 quicktime 负责浏览器的音频播放功能,不幸的是浏览器中设置的 cookie 没有被保留。

我是否必须向客户端发出一个临时访问代码,该代码可以与媒体文件请求一起通过查询字符串传递?或者有没有更简单的方法来解决这个问题?

谢谢阅读

4

1 回答 1

3

我通过实施替代身份验证流程解决了这个问题。现在,对媒体文件的每个请求都会在查询字符串上发送一个身份验证令牌。此令牌是在每个用户登录时生成的,并且在会话期间有效。

如果设置了 cookie 或在查询字符串上传递了有效的身份验证密钥,则提供媒体文件。

为了提高安全性,请考虑将令牌存储在客户端 IP 服务器端,并在将媒体文件提供给客户端之前验证请求来自生成令牌的同一 IP

于 2013-04-16T16:57:57.690 回答