永遠的真田幸村
解決網址中php session id導致的網站讀取問題
由 ivan 發表於 2:26, Sep 21, 2007 | 文章分類: 數位科技, www, 站務相關 | 標籤列表: PHP apache |
網址: http://yblog.org/archive/index.php/php_session_id_issue
優格網日前因為測試版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伺服器即可。
Copyright Reserved.本站圖文內容原作者版權所有:yblog.org 若欲轉載請先徵求本站同意並標明出處