我在session_vars和移动3G连接方面遇到了巨大的问题。
我们有一个虚拟校园,可以使用用户名和密码访问。在每个页面上验证用户是否使用以下代码登录:
<?PHP session_start();
//Avoid not logged users
if ($_SESSION['auth']!=true)
{
session_unset();
header('Location:index.php'); // login page
exit;
}
当用户尝试下载文件并使用 3G 连接时,有时会丢失其标识登录者的会话变量,并将用户发送到登录页面。
我们已尝试重现错误,但失败了。我们假设这可能取决于3G连接的条件。
所有使用加密狗 3g 的用户都无法使用笔记本电脑。
下面有html下载链接代码:
<a onclick="window.location.href='download_file.php?id=48558&id_aula=A1188788&p=5'" title="download 21115400_cat.pdf" class="Arial11BlueBold ManoSola">Download</a>
download_file.php:
<?PHP session_start();
//Avoid not logged users
if ($_SESSION['auth']!=true)
{
session_unset();
header('Location:index.php');
exit;
}
。
谢谢!
您的应用程序是否检查 IP 地址或除简单会话之外的任何其他变量?我不能肯定地说,但很可能用户的IP地址在浏览时正在发生变化,移动互联网提供商大量使用代理和其他此类技术。
我的猜测是,您的问题不是下载过程,而是您的会话识别用户的方式,即cookie。您需要调查为什么您的用户丢失了他们的会话 Cookie,这会导致自动断开连接。也许您的 3g 提供商缓存连接或在用户面前有代理?另一种可能性是您的会话以某种方式绑定到客户端的 IP 地址,该地址可能会在不稳定的 3g 连接期间发生变化。
看看这个:3G上的iPhone cookie/缓存问题,wifi 很好
Suhosin加密了会话,似乎确实改变了cookie和会话。我们已经在 php.ini 中禁用了加密。
[suhosin] suhosin.session.encrypt=Off
[suhosin] suhosin.cookie.encrypt=Off
我们还使用 Ajax 代理库,该库重新加载页面,并且某些会话变量丢失。我们替换了 Ajax 代理的 Ajax 调用。