Donwload souboru s cookie

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Honza.Mottl
Člen | 104
+
0
-

Ahoj,
downloaduji pdf soubor a potreboval bych soucasne zaslat cookie. Delam to ciste v php a neco delam spatne, cookie se neposila. Rad bych zeptal:

  1. Da se nejak sikovne v nette provest dowload souboru (pdf) soucasne s cookie?
  2. Co tam delam spatne?

Diky za pomoc.

Proc to delam:
na serveru generuji pdf, coz muze chvilku trvat. Potrebuji, aby uzivatel na prvni pohled videl ze to jeste bezi. Proto zobrazuji gif s load spinnerem. Spinner je treba ukoncit jakmile dobehne download. Proto cekam v js timeru az bude nastaveno cookie. Bohuzel se mi nedari poslat cookie soucasne se souborem :(

protected function send_download($file) {
     if (file_exists($file)) {
         set_time_limit(0);
         setcookie("fileDownloadToken", "fileDownloadToken", time()+360); // 10 minutes
         header('Connection: Keep-Alive');
         header('Content-Description: File Transfer');
         header('Content-Type: application/octet-stream');
         header('Content-Disposition: attachment; filename="'.basename($file).'"');
         header('Content-Transfer-Encoding: binary');
         header('Expires: 0');
         header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
         header('Pragma: public');
         header('Content-Length: ' . filesize($file));
         ob_clean();
         flush();
         readfile($file);
     }
 }
CZechBoY
Člen | 3608
+
0
-

Nepomůže toto vlákno na SA? http://stackoverflow.com/…ading-script

Honza.Mottl
Člen | 104
+
0
-

Díky. Asi by se to tak řešit dalo. Handler by udělal download, cookie by nebylo potřeba.

Já jsem použil tip z tohoto linku: http://gruffcode.com/…the-browser/

Honza.Mottl
Člen | 104
+
0
-

Na problém s cookie už jsem přišel. Ono se cookie posílalo, ale bylo vidět jen přes response. Musel jsem nastavit path a domain, aby bylo přístupné pro funkce použité ve zdroji, ze kterého jsem čerpal. "":/…the-browser/

S touto opravou to jede:

setcookie("fileDownloadToken", $fileDownloadToken, time()+360, '/', $this->template->domain); // 10 minutes
Honza.Mottl
Člen | 104
+
0
-

Koukal jsem i na možnost downloadu přes Ajax. Musel bych ještě zjišťovat jméno vygenerovaného pdf, byl by tam potenciální jména souboru v adresáři Downloads atd. Nakonec jsem dal přednost řešení s cookie.

Přitom jsem našel hezky udélaný příklad downloadu přes Ajax http://plnkr.co/…J6f1j6jhgJ4q?…