2008-06-26

解決網址中php session id導致的網站讀取問題

解決網址中php session id導致的網站讀取問題

優格網日前因為測試版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伺服器即可。

Ref

http://yblog.org/archive/index.php/php_session_id_issue

沒有留言: