Oturum beklenmedik kaybetti?

2 Cevap php

Ben bir rapor ihracat yapmak için can sıkıcı bir sorun ile bir kayıp değilim. Temel olarak, bir düğmeye basıldığında ve bir rapor aşağıdaki javascript kullanarak sunucu tarafında oluşturulur: -

__callExportController(true, { op: 'build', type: exportType }, function(data) {
    var outputURL = './reportinc/export_controller.php?op=output&filename=';
    var reportFilename = data['filename'];
    var reportTitle = data['title'];

    if (reportFilename && reportTitle) {

        var resultURL = outputURL + reportFilename + '&title=' + reportTitle;

        /* Initiate the download dialog */
        if (!$('#exportFrame').length) {
            var hiddenIFrame = document.createElement('iframe');
            hiddenIFrame.setAttribute('id','exportFrame');
            document.body.appendChild(hiddenIFrame);
        }

        $('#exportFrame').attr('src', resultURL);
    } else {
        error('No filename or report title specified!');
    }
});

Ihracat kontrolörün 'inşa' operasyonu sunucusunda geçici bir dosyaya rapor oluşturur. Eğer başarılı olursa, 'çıkış' operasyonu kullanıcıya indirme istemini almak için gizli bir iframe dosyasını çıkış denir. Internet Explorer 6/7 buradan kullanımda sadece tarayıcılar.

Bu iframe başarıyla inşa dosya ile talep edilecek sunucu üzerinde çıkış işleyicisi: -

/* Output handler */
case 'output':{

    $filename = $_GET['filename'];

    header('Content-Description: File Transfer');
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Type: application/pdf");

    /**
     * NOTE: It appears this is required for some versions of adobe!
     * http://www.acrobatusers.com/forums/aucbb/viewtopic.php?id=15400
     */
    header("Cache-Control: private");
    header("Pragma: cache");
    header("Content-Disposition: attachment; filename=\"file.pdf\"");
    header('Content-Length: ' . filesize($filename));

    /* Flush the headers immediately for larger files */
    ob_clean();
    flush();
    readfile($filename);
    @unlink($filename);
}

Ben yaşıyorum sorun: Bu kez çalışıyor iken, oturum ilk başarılı dosya indirme sonra yıkılmış gibi görünmektedir. Kullanıcı yeni bir session id oluşturulacak görünen başka bir sayfaya uzak gittiğinde olmasıdır. Bu aynı zamanda, temel kimlik aldıkları sonraki eylem ile kullanımda ise 're-login' zorunda kullanıcı gerektirir.

Sorun çok aralıklı görünüyor ve o zamanlarda değil diğer zamanlarda gerçekleşmesi gibi görünüyor.

Herkes herhangi bir fikir? Daha başlıklarını veya tahrip olmaktan kullanıcıların oturumu önlemek için bir şeyler ekleyerek olmalıdır?

2 Cevap

iframe üst düzey etki alanı eşit değilse Yani P3P protokolü dönmek ve oturumu siler olacaktır. bir başlık ekleyerek bu sorunu çözecektir.

http://weblogs.asp.net/coltk/archive/2010/10/13/session-lost-in-iframe-p3p-issue.aspx

Lütfen bir session_name veya session_start yerde eksik olabilir.

veya daha büyük olasılıkla, kullanıcıların çerezleri devre var demektir. Bu şekilde oturumların bir sitesi istek için geçerlidir