Никак не могу решить задачу: если не поддерживаются Cookie, тогда цепляем ссесию к каждой ссылке. НО! если использовать сжатие(в том виде как я его реализовал), output_add_rewrite_var не хочет делать подстановку сессии к ссылкам. В мануале нечто вроде, что если используется output_add_rewrite_var, тогда ob_handler не дожен изменяться или я что-то не так понял? Как бы сделать чтобы сначала происходила подстановка сессии к ссылкам, а уже потом можно было сжать данные? Пример: PHP: <?php function compression($buffer) { switch ($GLOBALS['compression_enc']) { case 'deflate': header("Content-Encoding: deflate"); header("Vary: user-agent, accept-encoding"); $buffer = gzdeflate($buffer, 9); break; case 'gzip': header("Content-Encoding: gzip"); header("Vary: user-agent, accept-encoding"); $buffer = gzencode($buffer, 9, FORCE_GZIP); break; default: header("Vary: user-agent"); break; } return $buffer; } header("Pragma: no-cache"); header("Cache-Control: no-cache, no-store"); header('Expires: '.gmdate("D, j M Y H:i:s \G\M\T")); header("Connection: close"); header("Content-Type: text/html; charset=utf-8"); session_name("s"); session_start(); if (!$_COOKIE["s"]) { ini_set("url_rewriter.tags", "a=href"); output_add_rewrite_var("s", session_id()); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head><title>HEADERS</title></head> <body> TEST<br /><a href="index.php?somevar=something">Something</a> </body></html> <?php $compress = FALSE; $compression_enc = 'no'; if (isset($_COOKIE['compression'])) { $compress = TRUE; $compression_enc = $_COOKIE['compression']; } elseif (isset($_SESSION['compression'])) { $compress = TRUE; $compression_enc = $_SESSION['compression']; } if ($compress) print compression(ob_get_clean()); else header("Vary: user-agent"); ob_end_flush(); ?>
Как альтернатива годится и это, НО если в $_SERVER['HTTP_ACCEPT_ENCODING'] не определены gzip или deflate, ob_gzhandler не будет работать, выдает заголовки типа "Content-Encoding: gzip", но не сжимает! PHP: <?php header("Pragma: no-cache"); header("Cache-Control: no-cache, no-store"); header('Expires: '.gmdate("D, j M Y H:i:s \G\M\T")); header("Connection: close"); header("Content-Type: text/html; charset=utf-8"); if ((isset($_GET['compression'])) && ($_GET['compression']==FORCE_DEFLATE || $_GET['compression']==FORCE_GZIP)) { if ($_GET['compression'] == FORCE_DEFLATE) header("Content-Encoding: deflate"); elseif ($_GET['compression'] == FORCE_GZIP) header("Content-Encoding: gzip"); header("Vary: user-agent, accept-encoding"); ob_start("ob_gzhandler", $_GET['compression']); } session_name("s"); session_start(); if (!$_COOKIE["s"] && $_GET['s']) { ini_set("url_rewriter.tags", "a=href"); output_add_rewrite_var("s", session_id()); } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head><title>HEADERS</title></head> <body> <?php if ((isset($_GET['compression'])) && ($_GET['compression']==FORCE_DEFLATE || $_GET['compression']==FORCE_GZIP)) print "Compression: ".$_GET['compression']."<br />"; ?> TEST<br /><a href="index.php?somevar=something">Something</a> </body></html> [/php]