php检测浏览器文件下载完毕,检测浏览器何时收到文件下载

一可能的解决办法在客户机上使用JavaScript。

客户端算法:生成一个随机唯一的令牌。

提交下载请求,并将令牌包含在GET/POST字段中。

显示“等待”指示器。

启动一个计时器,每一秒左右,查找一个名为“fileDownloadToken”的cookie(或您决定的任何内容)。

如果存在cookie,并且其值与令牌匹配,则隐藏“等待”指示符。

服务器算法:在请求中查找get/post字段。

如果它具有非空值,则删除cookie(例如“fileDownloadToken”),并将其值设置为令牌的值。

客户端源代码(JavaScript):function getCookie( name ) {

var parts = document.cookie.split(name + "=");

if (parts.length == 2) return parts.pop().split(";").shift();}function expireCookie( cName ) {

document.cookie =

encodeURIComponent(cName) + "=deleted; expires=" + new Date( 0 ).toUTCString();}function setCursor( docStyle, buttonStyle ) {

document.getElementById( "doc" ).style.cursor = docStyle;

document.getElementById( "button-id" ).style.cursor = buttonStyle;}function setFormToken() {

var downloadToken = new Date().getTime();

document.getElementById( "downloadToken" ).value = downloadToken;

return downloadToken;}var downloadTimer;var attempts = 30;// Prevents double-submits by waiting for a cookie from the server.

function blockResubmit() {

var downloadToken = setFormToken();

setCursor( "wait", "wait" );

downloadTimer = window.setInterval( function() {

var token = getCookie( "downloadToken" );

if( (token == downloadToken) || (attempts == 0) ) {

unblockSubmit();

}

attempts--;

}, 1000 );}function unblockSubmit() {

setCursor( "auto", "pointer" );

window.clearInterval( downloadTimer );

expireCookie( "downloadToken" );

attempts = 30;}

示例服务器代码(PHP):$TOKEN = "downloadToken";// Sets a cookie so that when the download begins the browser can

// unblock the submit button (thus helping to prevent multiple clicks).

// The false parameter allows the cookie to be exposed to JavaScript.$this->setCookieToken( $TOKEN, $_GET[ $TOKEN ], false );

$result = $this->sendFile();

其中:public function setCookieToken(

$cookieName, $cookieValue, $httpOnly = true, $secure = false ) {

// See: http://stackoverflow.com/a/1459794/59087

// See: http://shiflett.org/blog/2006/mar/server-name-versus-http-host

// See: http://stackoverflow.com/a/3290474/59087

setcookie(

$cookieName,

$cookieValue,

2147483647,            // expires January 1, 2038

"/",                   // your path

$_SERVER["HTTP_HOST"], // your domain

$secure,               // Use true over HTTPS

$httpOnly              // Set true for $AUTH_COOKIE_NAME

);}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值