php.ini dosyanızda session.use_trans_sid = 0 şeklinde bir satır bulunur. bu ayar 1 yani true/on olduğunda php oluşturulmuş session_id değerini, dosyalarınızı parse ederken gene php.ini dosyasında bulunan url_rewriter.tags ayarında bulunan html tag’lerinin varolan değerlerinin sonuna PHPSESSID=1156985263454412295142353782 şeklinde ekler. aslına bakarsanız bu session.use_trans_sid ayarı varsayılan olarak kapalı durumdadır. ancak çeşitli nedenlerden dolayı bu özelliği açmak durumunda kalabiliyorsunuz. işte sorunumuz bu ayar açık olduğu durumlarda xhtml validation yaptırırken karşılaştığımız hatalar… hata örnekleri için buradaki 138,139,140,141′e bakabilirsiniz.
validator’ın sorunu & karakterinin & şeklinde yazılmaması. aslında verdiğiniz url adresinde herhangi bir GET değeri yoksa php index.php?PHPSESSID=1156985263454412295142353782 şeklinde vereceği ve adresin içinde & karakteri olmayacağı için sorun değil. ancak index.php?falan=filan gibi bir url adresi php tarafından rewrite yapıldığında index.php?falan=filan&PHPSESSID=1156985263454412295142353782 haline dönüşüyor. ve bu tür linklerin (ister elle verin ister php session id için düzenlemiş olsun) validator 2 warning 1 error ve bir de info bilgisiyle dönüyor bu türdeki her bir url adresi için…
çözüm aslında çok basit. php’yi yazan amcaların sağlam insanlar olduğunu zaten biliyorduk. bunu da gözden kaçıracak değillerdi.. ve php.ini dosyasına bir ayar daha eklemişler bu nedenle:
;arg_separator.output = “&”
ancak bu ayar default olarak önündeki ; nedeniyle comment’li durumda. işte bu satırdaki ; karakterini kaldırarak bu ayarı aktif hale getirdiğinizde php artık url adreslerinizi index.php?falan=filan&PHPSESSID=1156985263454412295142353782 şeklinde yazmaya başlıyor ve validator hatalarından kurtuluyorsunuz…
eğer php.ini dosyasına müdahale edebilecek durumda değilseniz
1) bir .htaccess dosyası hazırlayın ve içine php_value arg_separator.output & satırını ekleyin. bunun avantajı bu ayarı sadece istediğiniz bir site veya dizin için yapabiliyor olmak
2) bu ayarın geçerli olmasını istediğiniz dosyanın başına php kodları arasında ini_set('arg_separator.output','&'); satırını ekleyin. bunun avantajı da bu ayarı sadece istediğiniz bir dosya veya dosyalarda geçerli kılmanız..
bu konuda daha geniş bilgi için http://www.w3.org/QA/2005/04/php-session adresi referans alınabilir…