我想使用会话来跟踪唯一的网页浏览量。我知道,这不是一种非常强大的方法,但足以满足我的目标。
在第一页加载时,会话变量已设置,并且数据库中的字段会递增。在后续页面视图中,它不会递增,因为增量是以未设置的会话变量为条件的。
这是我的代码:
$pagenumber = 1;
//other stuff here...
session_start();
if (!isset($_SESSION[$pagenumber])) {
$storeview = mysqli_query($dbconnect, "UPDATE tblcount SET views=views+1 WHERE id='$pagenumber'");
$_SESSION[$pagenumber] = $pagenumber;
}
echo $_SESSION[$pagenumber];
$Recordset1 = mysqli_query($dbconnect, "SELECT views FROM tblcount WHERE id = '$pagenumber'");
$row_Recordset1 = mysqli_fetch_assoc($Recordset1);
echo "Viewed ".$row_Recordset1['views']." times";
第一个回声仅用于测试。它回显了页面刷新时的正常值,并且第一次增量工作,但视图计数在每次页面刷新时继续递增,这不应该是。我不明白为什么。
我发现了一个类似的问题: PHP: Unique visits/hits to specific items using cookies/ip但我遇到了与此处提供的解决方案类似的问题。
帮助表示赞赏!
答案 0 :(得分:1)
tblCount
更新时间,因为每次脚本完成时您的会话都会关闭。
因此:将session_start()
电话号码作为第一行置于代码中。$_SESSION
变量。因此,如果您设置$_SESSION[$pagenumber] = 'something'
,则会收到以下通知:(!)注意:未知:在第0行的“未知”中跳过数字键1
相当......不可理解。有关详细信息,请参阅this answer。
将$pagenumber
作为索引添加到数组(此处为pagenumbers
),将该数组添加到$_SESSION
变量中。没有通知了。
session_start();
$pagenumber = 1;
if (!isset($_SESSION['pagenumbers'])) {
$_SESSION['pagenumbers'] = array();
}
if (!isset($_SESSION['pagenumbers'][$pagenumber])) {
updateViews($pagenumber);
$_SESSION['pagenumbers'][$pagenumber] = $pagenumber;
}
echo 'Page number: ' . $_SESSION['pagenumbers'][$pagenumber] . '<br/>';
$views = getViews($pagenumber);
echo '<pre>Viewed ' . print_r($views, true) . ' times</pre>';
注意:我用我的函数进行测试。他们只是替换你的db处理代码。
答案 1 :(得分:0)
刚刚测试过。这也有效。
在session_start();
//获取页面名称
$ page_url = $ _SERVER [&#39; REQUEST_URI&#39;];
//创建会话ID。将充当访客用户名
如果(isset($ _ SESSION [&#39; ID&#39;]!)){
$ _ SESSION [&#39; id&#39;] = session_id();
//访问第一页
$ visit_id = $ _SESSION [&#39; id&#39;];
}否则{
//后续访问任何页面
$ visit_id = $ _SESSION [&#39; id&#39;];
}
/ ******************
查询DB。每个会话每页只插入一次访问。
这意味着我们需要为每个页面计数以获得其总访问量。
或计算所有记录以获得网站总访问次数
************** /
$ query_visits_table = mysqli_query($ db_connect,&#34; SELECT * FROM tblcount WHERE(visit_id =&#39; $ visit_id&#39;)AND(page_name =&#39; $ page_url&#39;)&#34;);
if(mysqli_num_rows($ query_visits_table)&gt; 0){
//如果在此会话期间访问过此页面,则不执行任何操作
}否则{
mysqli_query($ db_connect,&#34; INSERT INTO tblcount(visit_id,page_name,visit)VALUES(&#39; $ visit_id&#39;,&#39; $ page_url&#39;,&#39; 1&# 39)&#34);
}
//获取网站总访问次数 $ query_site_visits = mysqli_query($ db_connect,&#34; SELECT * FROM tblcount&#34;);
//对于特定页面
$ query_specific_page_visit = mysqli_query($ db_connect,&#34; SELECT * FROM tblcount WHERE page_name =&#39; $ page_url&#39;&#34;);
if(isset($ query_site_visits)&amp;&amp; isset($ query_specific_page_visit)){
$ site_total_visits = mysqli_num_rows($ query_site_visits);
$ specific_page_visit = mysqli_num_rows($ query_specific_page_visit);
回声&#39;总访问量为&#39; 。 $ page_url。 &#39;是&#39; 。 $ specific_page_visit;
出口();
}