2014-01-22 33 views
1

我的PHP 5.3服務器正在使用use_only_cookies dans處理沒有use_trans_id的會話,會話文件保存在專用目錄中。通過Googlebot抓取網站時禁用會話

當Googlebot或Google Search Appliance機器人或任何其他非Cookie支持的瀏覽器抓取網站時,會爲每個請求的頁面創建不同的會話文件。恐怕這些文件將會使用大量的空間磁盤。

是否可以爲特定的用戶代理或不使用cookie的瀏覽器禁用會話文件?我不想用trans_id功能替換會話,因爲它可能有SEO缺點。

是否有一個Apache/PHP指令,或設置,或任何其他技巧有以下行爲:

  • 如果瀏覽器不支持cookie(通過用戶代理黑名單或其他方法),然後我們總是使用相同的會話文件,或者我們沒有使用任何其他瀏覽器的會話文件
  • ,請使用標準會話文件處理程序。

回答

1

當然,你可以檢查$_SERVER['HTTP_USER_AGENT']的內容並檢查已知的機器人。如果它是一個機器人,那麼不要叫session_start()(儘管如果你的邏輯依賴於代碼的更深層次的話,這可能會產生不希望的效果)。

+1

...我從不擔心會話數據填滿服務器過多。 PHP在幕後管理這個功能相當出色。 – dartacus

+0

這可能是大多數網站的情況。但是,當您的網站擁有數十萬個網頁時,Google bot可能每天抓取20k,每天創建20k個新會話文件。如果您將會話保存一週,您將僅從Google機器人獲得大約140,000個會話,並從其他機器人獲得更多。另一方面,我們每天只能獲得幾百個獨特的用戶。所以99%的會話文件來自漫遊器! –

+0

我可以看到你的觀點,它非常有效。但是,自從最初回答這個問題以來,我發現抓取頁面變得越來越複雜。最近的例子是Google的移動可用性分析,並直接影響您在移動設備上的搜索排名。如果Googlebot被拒絕進行會話,並且沒有進行會話會使頁面的可用性降低/執行速度變慢等,那麼對於您的頁面排名而言,這可能是一件非常糟糕的事情。 – dartacus

1

if (strpos($_SERVER[‘HTTP_USER_AGENT’],"Googlebot") === false) { session_start(); }

但我不知道這是否是值得的。會議GC是相當有效的,如果有人將覆蓋用戶代理Googlebot的,他不會有會話

2
if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot")){ 
    $sid = md5("mygooglebotsessionid"); 
    session_id($sid); 
} 

在session_start前加入這個();

您可以爲漫遊器設置唯一的SessionID,而不是禁用漫遊器的會話。每次bot都使用相同的SessionID,所以它不會浪費會話存儲空間。

PS:不確定搜索引擎優化的弊端。