2012-04-11 53 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'");