日前因为测试版Linux核心更新失败,系统整个重新安装,更新网页伺服器为Apache 2.2.6,并更新PHP 5.2.4后,自己忘了把一项设定做修改,以至于只要访客每次开启浏览器上网,「初次」拜访本站时,系统会自动修改访客阅读页面中的连结,在网址后面加上一串「PHPSESSID=xxxxxxxxxxxxxxxxxxxxxx」的字样,点选之后,会被传导到网站首页,之后点选任何连结就不会有网址包含php session id的现象。

这是因为php在提供访客浏览页面时,碰到浏览器不支援cookie或关闭cookes功能的访客,会透过自动重写网址,加上php session id来支援session。而网路访客不论是用什么浏览器,连结本站打开第一个页面时,Apache网页伺服器搭配php的系统收到你电脑浏览器的访问请求后,会建立一个新的session,但由于没办法知道访客浏览器是否支援cookie,所以重写所有网址,加上php session id的参数,网址后面就会接上一长串PHPSESSID=xxxxxxx。

要解决这个问题有个偷懒的方法,因为不是所有的伺服器或采用的网页程式都会碰到这个问题,只要修改php.ini,这个控制php设定与参数的档案即可。
最主要得修改的参数是session.use_trans_sid,预设值为session.use_trans_sid = 1,表示开启这项自动重写网址以支援session的功能,改成session.use_trans_sid = 0即可。

另一个控制的方法是改变phpini中网址重写的条件,将原本设定成url_rewriter.tags="a=href,area=href,frame=src,input=src,form=fakeentry,fieldset="的预设值,改成url_rewriter.tags=""也可以。
以上这2种方法的缺点就是,不支援未打开cookie或未具备写入cookie的用户。因为这样的设定,将透过重写网址以支援session的架构给关闭,不予以启动。不过因为不支援或不打开cookie功能的用户实在是少之又少,几乎可以不需要考虑,设定好之后,重新启动Apache伺服器即可。