Arkadaşım aynı şekilde yazacaksan sessiona atsana, serialize ile uğraşacağına:

<?php
if(!$_SESSION['kategoriler'] || || (time() - $_SESSION['kategori_zamani'] > 600)){//sessionda kategoriler yoksa veya kontrol süresi 10 dakikayı geçmişse
	$sql = mysql_query("SELECT id,katadi,seo,alt FROM kategori ORDER BY seo ASC");
	while($yaz = mysql_fetch_array($sql)) {
		$altsql = mysql_query("SELECT katadi,seo,alt FROM kategori WHERE alt='$yaz[id]' ORDER BY seo ASC");
		while($altyaz = mysql_fetch_array($altsql)) {
			$kategoriler .= '<li class="alt"><a href="'.$ayar['siteadres'].'/'.$altyaz['seo'].'/">'.$altyaz['katadi']."</a></li>";
		}
		$kategoriler .= '<li><a href="'.$ayar['siteadres'].'/'.$yaz['seo'].'/">'.$yaz['katadi']."</a></li>";
	}
	$_SESSION['kategoriler'] = $kategoriler;
	$_SESSION['kategori_zamani'] = time();
}
else{
	$kategoriler = $_SESSION['kategoriler'];
}
echo $kategoriler;
?>
Yok serialize istiyorsan da aynı mantıkla, serialize, unserialize yapabilirsin. Sadece $kategoriler .= yerine $kategoriler[$i] = "",$kategoriler[$i]['altkat']="" vb. şeklinde kullanırsın.