2012-04-11 40 views
1

林創建此代碼存儲在數據庫中的網頁瀏覽,但我有問題的更新,現在的行...更新頁面視圖

我需要檢查,如果會話和URL是相同的比我更需要更新的行觀點..這裏是代碼

$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); 
$browser = mysql_real_escape_string($_SERVER['HTTP_USER_AGENT']); 
$referer = mysql_real_escape_string($_SERVER['HTTP_REFERER']); 
$url = mysql_real_escape_string($_SERVER['REQUEST_URI']); 
$session = session_id(); 


mysql_query(" INSERT INTO page_view(ip,url,referer,session,view) 
        VALUES (
        '".$ip."', 
        '".$url."', 
        '".$referer."', 
        '".$session."', 
        '1') 
        "); 
+0

有點偏離主題,但是你有什麼理由不想檢查IP地址嗎?我只是認爲如果你只是更新'view'列而不檢查它是否來自同一個IP,[會話劫持](http://en.wikipedia.org/wiki/Session_hijacking)將不會被檢測到。 – beny23 2012-04-11 11:36:49

回答

1

url,session對獨特和使用ON DUPLICATE KEY條款

mysql_query("INSERT INTO page_view(ip,url,referer,session,view) 
       VALUES (
       '".$ip."', 
       '".$url."', 
       '".$referer."', 
       '".$session."', 
       '1') 
      ON DUPLICATE KEY UPDATE view = view +1 
       "); 
+0

由於會話被重複使用,所以可能會爲來自另一個IP的另一個用戶分配相同的sessionid,所以我也會將IP包含在唯一的密鑰中。 – Wige 2012-04-11 11:34:56

+0

@Wige會話應該是唯一的。不管ip – safarov 2012-04-11 11:42:03

+0

這不是個好主意,現在會話是獨一無二的,並且當你去其他url時,數據庫中沒有新的記錄,簡單的會更新第一個,因爲會話是相同的... – 2012-04-11 11:53:53

0

我會查詢該會話的最後一個插入,然後檢查URL是否更改。

If (changed) update; 
Else insert; 
0

我會創造的列IP,URL和會話的唯一指標,然後做插入...對重複鍵:

INSERT INTO page_view(ip,url,referer,session,view) 
VALUES ('".$ip."','".$url."','".referer."','".$session."','1') 
ON DUPLICATE KEY UPDATE view = view + '1'");