2010-07-07 27 views
2

我正在使用iPage.com主機。爲了在他們的主機中使用PHP會話,我需要在每個頁面的開始處添加session_save_path('/home/users/web/.../cgi-bin/tmp');(在我的情況下,只有index.php,因爲所有內容都先通過index.php)。現在我的網站主機正在添加?PHPSESSID = fgh2h45 ...到URL的末尾

,它們會自動會話ID添加到每個URL的末尾要求是這樣的:website.com/movies/details/?PHPSESSID=4s54kjhdl ...

我認爲這是造成問題,並可能影響谷歌索引和SEO ..

如何防止這種情況?

回答

6

您的「主機」不會導致問題,PHP正在追加此數據。具體來說,PHP被配置爲將PHPSESSID變量附加到URL以允許PHP跟蹤會話。在調用session_start之前,可以使用ini_set來更改相關設置,或者通過更新php.ini文件來永久更改相關設置(儘管由於您承載了最後一個選項可能已不存在)。 This is a list of the available runtime settings for sessions in PHP

雖然您可以控制是否將值附加到URL的末尾,但需要跟蹤會話。或者,您可以將PHP配置爲使用Cookie跟蹤會話,但要求使用Cookie來跟蹤會話可能會導致拒絕Cookie的用戶中斷應用程序。

總之,您可以控制會話ID使其更漂亮一些(通過將PHPSESSID重命名爲更適合的內容或使該值更加隱蔽),但除非您想使用Cookie來維護會話,否則會卡住這個「垃圾」在你的URL上。如果您僅使用,某些用戶可能無法維護會話。

要啓用基於Cookie的會話處理,你可以既可以執行:

// stop PHP from automatically embedding PHPSESSID on local URLs 
ini_set('session.use_trans_sid', false); 

// only use cookies (no url based sessions) 
ini_set('session.use_only_cookies', true); 
+0

允許cookie以外的任何內容都會暴露用戶進行會話修復。 – Artefacto 2010-07-07 01:21:51

+0

@Artefacto,[Wikipedia建議了除簡單地不接受GET/POST SID之外的許多方法](http://en.wikipedia.org/wiki/Session_fixation) – 2010-07-07 01:27:49

+0

在'Mike Sherov'答案中,他提出錯誤而不是真實的是正確的? @Artefacto:你能解釋一點關於會話固定問題嗎?所以只使用cookie而不是會話? – Jonathan 2010-07-07 01:32:08

0

要麼將​​其配置爲完全使用基於cookie的會話或會話輪流。

+1

沒有幫助我..完全關閉會話? – Jonathan 2010-07-07 01:07:24

2

如果您不能修改php.ini中自己,你可以做到以下幾點:

ini_set('session.use_trans_sid',false); 

這將導致PHP使用基於cookie的會話處理,而不會將會話ID追加到URL (無論如何這可能是安全風險)。