我有一个受密码保护的Apache目录,里面有文本文件和电影文件。目前,我使用cURL加载文本文件的内容,并使用CURLOPT_USERPWD
传递用户名和密码信息。对于电影,我将OBJECT和EMBED src设置为http://username:password@example.com/file.mov
。在这两种情况下,用户名和密码分别来自$_SERVER['PHP_AUTH_USER']
和$_SERVER['PHP_AUTH_PW']
。如果这不起作用,则会提示用户提供具有通用HTTP身份验证弹出窗口的新凭据。
有更合适的方法吗?或者嵌入受密码保护的电影只是一个错误/坏主意?
上述方法导致两个(相关的?)问题。首先,(据我所知)随机地,在嵌入电影时似乎没有传递username:password@
部分,因此用户被迫再次输入他们的凭证。这很少发生,只是很烦人,但修好会很好。
其次,这会导致Snow Leopard下的Safari崩溃。 Safari一定会提示用户输入凭据,然后冻结。非密码保护的电影(或将受密码保护的电影移动到非密码保护的目录)加载正常。这个问题在Snow Leopard之前并不存在,但我还没有在Snow Leopard下的旧版本Safari上测试它,所以它可能是最近爆发的更新之一。
注意:由于使用这些文件的其他程序需要Apache密码保护,因此无法移动到另一个登录系统(从而否定问题),这是不可能的。
答案 0 :(得分:2)
您是否在安全连接上?否则看起来好像用户名/密码是开放的窥探眼睛?
我倾向于使用服务器端脚本(例如serve_content.php
)来管理受保护内容的服务。并链接到它:
src="serve_content.php?id=1234"
serve_content.php
检查用户是否已登录。从传递的id中识别文件(掩盖受保护内容的真实位置),因此'1234'可能是'mymovie.avi'。并将文件发送到客户端。例如。使用readfile()
和相应的标题。
Apache密码保护目录用于防止未经授权的直接访问。如果您通过其他方法记录您的用户,则没有用户只能通过serve_content.php
直接访问该文件。