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.
精彩评论