开发者

IE7 clears session when I send download headers

So, IE7 keeps logging my clients out if they try to download files from my website. The files are downloaded indirectly with a download script which uses something like:

private static function SendHeaders($theFileNameServer=NULL, $theFileNameClient, $theMimeType, $theSize)
{
    $aBegin = 0;
    $aEnd = $theSize;

    // fix for IE catching or PHP bug issue
    header('Pragma: public'开发者_高级运维);
    header('Expires: 0'); // set expiration time
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    // browser must download file from server instead of cache

    // force download dialog
    header('Content-Type: application/force-download');
    header('Content-Type: application/octet-stream');
    header('Content-Type: application/download');

    // use the Content-Disposition header to supply a recommended filename and
    // force the browser to display the save dialog.
    header('Content-Disposition: attachment; filename='.$theFileNameClient.';');

    /*
    The Content-transfer-encoding header should be binary, since the file will be read
    directly from the disk and the raw bytes passed to the downloading computer.
    The Content-length header is useful to set for downloads. The browser will be able to
    show a progress meter as a file downloads. The content-lenght can be determines by
    filesize function returns the size of a file.
    */
    header('Content-Transfer-Encoding: binary');
    header('Content-Length:'.($aEnd-$aBegin));

    self::FlushX();
}

private static function FlushX(){
    // check that buffer is actually set before flushing
    if (ob_get_length()){           
        @ob_flush();
        @flush();
        @ob_end_flush();
    }   
    @ob_start();
}

So, it seems the cache headers are somehow confusing IE7 and making it dump all cookies or something.

Any workaround for this problem? My login system works great in Firefox, Chrome etc.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜