我编写了一个Web应用程序,通过http提供媒体文件,以便在html5音频元素中播放。在提供媒体文件之前,服务器会检查cookie是否提供了当前的PHP会话ID,如下所示:
PHPSESSID = 3u90bfmqepd14s4rvslmrv69d1
IE / Firefox / Chrome似乎都发送了cookie以及音频文件的请求,但是在OSX Safari中,请求是使用不同的用户代理字符串(包含“quicktime”)发送的,并且没有cookie。据推测,这是因为quicktime负责浏览器的音频播放功能,遗憾的是,浏览器中设置的cookie不会被转移。
我是否必须向客户端发送临时访问代码,该代码可以与查询字符串一起传递给媒体文件?或者有没有更简单的方法解决这个问题?
感谢您阅读
答案 0 :(得分:3)
我通过实现另一种身份验证流程解决了这个问题。现在,对媒体文件的每个请求都会在查询字符串上发送身份验证令牌。此签名是在登录时为每个用户生成的,并且在会话期间有效。
如果设置了cookie或在查询字符串上传递了有效的auth密钥,则会提供媒体文件。
为了提高安全性,请考虑将令牌存储在客户端IP服务器端并验证请求来自同一IP,在将媒体文件提供给客户端之前生成令牌