我正在重新发布这个问题,因为我第一次没有得到任何有用的答案。
我的网站上有一个简单的会话计数器,利用 session_save_path()。代码在共享托管环境中无法正常工作,因为它会返回服务器上所有网站上所有会话的计数 - 或者我认为是这样。
有人能告诉我如何修改这样才能正常运行。我知道计数会话并不能准确反映数字,但它不一定是100%准确。对于像这样的简单函数,我也不认为点击数据库是一个明智的想法。
必须有一种方法以正确的方式实现这一点。你能帮忙吗?
谢谢!
<?php
//------------------------------------------------------------
// VISITORS ONLINE COUNTER
//------------------------------------------------------------
if (!isset($_SESSION)) {
session_start();
}
function visitorsOnline()
{
$session_path = session_save_path();
$visitors = 0;
$handle = opendir($session_path);
while(( $file = readdir($handle) ) != false)
{
if($file != "." && $file != "..")
{
if(preg_match('/^sess/', $file))
{
$visitors++;
}
}
}
return $visitors;
}
?>
答案 0 :(得分:2)
您可以为应用程序设置不同的会话路径。这也是防止他人获取会话数据的好主意。
但是我认为使用数据库对服务器的影响较小,然后读取会话目录:)
您可以使用无需任何磁盘访问即可工作的堆内存表。
答案 1 :(得分:1)
您可能能够将“您的”会话文件与使用fileowner()
或is_readable()
的其他用户区分开来 - 后者遵循您只能访问会话文件的逻辑(井) ,希望!)
如果它完全有效,这将在很大程度上取决于服务器配置。
我想到的唯一非常好的方法是让你的脚本写入每个会话的单独数据库表,经常清理旧记录,从那里获取计数。
答案 2 :(得分:-1)
我建议使用.txt文件来保存计数。
示例:
<?php
/**
* Create an empty text file called counterlog.txt and
* upload to the same directory as the page you want to
* count hits for.
*
* Add this line of code on your page:
* <?php include "text_file_hit_counter.php"; ?>
*/
// Open the file for reading
$fp = fopen("counterlog.txt", "r");
// Get the existing count
$count = fread($fp, 1024);
// Close the file
fclose($fp);
// Add 1 to the existing count
$count = $count + 1;
// Display the number of hits
// If you don't want to display it, comment out this line
echo "<p>Page views:" . $count . "</p>";
// Reopen the file and erase the contents
$fp = fopen("counterlog.txt", "w");
// Write the new count to the file
fwrite($fp, $count);
// Close the file
fclose($fp);
&GT?;
来源:http://www.totallyphp.co.uk/scripts/text_file_hit_counter.htm
最佳,
亚历。