我正在开发一个分析脚本,人们可以将其添加到页面中以跟踪访问者数据.我遇到的一个问题是设计一种方法来跟踪个人会话,当他们从私人浏览器(即Incognito)查看某人的页面时.
这是我用来查看某人是否有人活动超过30分钟的脚本,如果他们有,将创建一个新会话,如果没有,那么他们将恢复他们以前的会话.
session_start();
$max_time = 1800;
$current = time();
if (!isset ($_SESSION['Stationary'])){
$_SESSION['Stationary'] = time();
$session = $_SESSION['Stationary'];
}
if (!isset ($_SESSION['Inactive'])) {
$_SESSION['Inactive'] = time();
} else {
$session_life = $current - $_SESSION['Inactive'] ;
if ($session_life > $max_time ) {
session_destroy();
session_start();
$_SESSION['Inactive'] = time();
$_SESSION['Stationary'] = time();
$session = $_SESSION['Stationary'];
} else {
$_SESSION['Inactive'] = time();
$session = $_SESSION['Stationary'];
}
}
Run Code Online (Sandbox Code Playgroud)
当用户从常规浏览器(IE.Chrome Incognito)查看我的页面时,此脚本可以完美运行,但是当他们在iPhone上进行查看时,在私人浏览中,每次访问新页面时,都会呈现新会话 - - 除非另有说明,否则我没有这个问题.
所以我的问题是,我知道在私人浏览器中查看页面是通过临时缓存来实现的,一旦浏览器关闭就会被清除,但是为什么即使浏览器没有关闭,打开链接也会破坏他们之前的会话,即使链接指向另一个页面,页面上有相同的脚本?
这有解决方法吗?
编辑:
我应该注意,这个脚本被放在一个php文件中,头文件application/json也可以用作JavaScript文件.
假设客户填写了他访问过的第3页上的表格,我们如何找到他的流程.(他来自哪里,他点击的网站链接,基本上是整个流程,直到他填写表格).
网站上没有登录或任何类型的身份验证系统.有没有办法监控用户流量?我对谷歌分析没有多少经验.谁能帮我这个?
$ _SERVER ['REMOTE_ADDR']返回127.0.0.1.
是因为我安装了清漆缓存和数据转到清漆,然后apache和服务器认为请求来自清漆而不是客户端?
我用Luracast Restler 3 RC 6(https://github.com/Luracast/Restler/tree/3.0.0-RC6)创建了一个API,现在我想创建一个登录到我的API,以便每个请求都为将记录API.我试图在任何地方寻找答案,没有运气.所以我的问题是:
如何在Restler 3中创建日志记录类/函数,每次发出请求时都会调用它?应该以某种方式实现路由,还是什么?我需要这样的东西:
logging($route, $http_method, $format, $api_key, $parameters);
Run Code Online (Sandbox Code Playgroud)
这个函数/类应该获取正在进行的请求的所有可能信息并将其插入logging表中,如下所示:
+----+---------------------+------------+----------+----------------+--------+---------------------------+
| id | log_time | ip_address | api_key | route | method | parameters |
+----+---------------------+------------+----------+----------------+--------+---------------------------+
| 1 | 2015-08-06 14:32:54 | 127.0.0.1 | ASDFasdf | /v1/users/list | GET | all_given_parameters_here |
+----+---------------------+------------+----------+----------------+--------+---------------------------+
Run Code Online (Sandbox Code Playgroud)
我不是要求你为我创建一个用于记录的函数/类,我只是需要一些关于如何以及在何处执行此操作的指导,或者它是否可能?
编辑:忘记提及我还需要记录方法,该方法用于给定的路由:GET,POST,PUT,PATCH或DELETE.也许还使用了格式(JSON或XML).
编辑:我认为我应该Routes->find()以某种方式扩展Luracast\Restler\Routes.php ,但是如何以及在哪里?
我无法获取客户端的 IP 地址,我需要确定他的当前位置。
我使用过 request->ip(), $_SERVER['REMOTE_ADDR'] 并且我总是得到 127.0.0.1 结果,这不是我想要的。
我究竟做错了什么?
我正在尝试从php联系表单获取用户IP地址,我有以下代码,但我想知道以这种方式使用clean_string向我自己发送IP地址是有效的吗?
<?php
session_start();
if(isset($_POST['fullname'])) {
include 'freecontact2formsettings.php';
function died($error) {
echo "Sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.<br /><br />";
echo $error."<br /><br />";
echo "Please go back and fix these errors.<br /><br />";
die();
}
if(!isset($_POST['fullname']) ||
!isset($_POST['Address1']) ||
!isset($_POST['city']) ||
!isset($_POST['Postcode']) ||
!isset($_POST['contactnum']) ||
!isset($_POST['emailaddress'])
) {
died('Sorry, there appears to be a problem with your form submission.');
}
$ip = $_SERVER['HTTP_CLIENT_IP'];
$ansb0_from = $_POST['fullname']; // required
$ansb1_from …Run Code Online (Sandbox Code Playgroud) 我需要获取用户的IP地址”。
我找到了这篇文章如何在Laravel 5.1中获取客户端IP地址?
上述文章使用了 Request::ip();
但是,此方法返回我的服务器IP地址。据我从其他来源了解到,这是在站点为localhost时发生的-但是站点是托管的,并且位于服务器上。
这个站点是在线的并且在线的,但是它可能称为localhost,因为该站点可能位于其自己的服务器上(我没有服务器配置方面的经验,只能知道这是不是真的)。
当我连接到数据库主机时,我也使用localhost引用,而不是使用mysql.phpmyadmin.hosting.com数据库主机。因此,我的猜测是,该Request::ip();返回值返回服务器ip,因为该站点以某种方式位于localhost。
但是,如果我使用$ _SERVER ['HTTP_X_FORWARDED_FOR']; 我得到正确的IP地址。
现在我的最后一个问题是:使用安全吗?还有使用Laravel函数发出此请求的另一种方法吗?
据我了解,$ _ SERVER ['HTTP_X_FORWARDED_FOR']; 根据如何在PHP中获取客户端IP地址,可能会有安全漏洞?。
我可以$_SERVER['HTTP_X_FORWARDED_FOR'];安全使用而不必担心吗?如果没有,我可以采取其他方法安全地获得用户IP地址吗?
我正在尝试创建一个php计数器,为了不计算同一访问者的重复访问,我一直在考虑将访问者的IP地址保存到数据库中,我应该转向$_SERVER
我读过@Dusza 的这个示例函数,它看起来很好很方便:
<?php
function get_IP() {
// ADDRESS IP
if (getenv('HTTP_CLIENT_IP')) $ipaddress = getenv('HTTP_CLIENT_IP');
else if(getenv('HTTP_X_FORWARDED_FOR')) $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
else if(getenv('HTTP_X_FORWARDED')) $ipaddress = getenv('HTTP_X_FORWARDED');
else if(getenv('HTTP_FORWARDED_FOR')) $ipaddress = getenv('HTTP_FORWARDED_FOR');
else if(getenv('HTTP_FORWARDED')) $ipaddress = getenv('HTTP_FORWARDED');
else if(getenv('REMOTE_ADDR')) $ipaddress = getenv('REMOTE_ADDR');
else $ipaddress = 'UNKNOWN';
//return $ipaddress;
}
?>
Run Code Online (Sandbox Code Playgroud)
但我在这里做了一些研究,发现其中存在一个安全漏洞,因为用户可以欺骗除 REMOTE_ADDR 之外的所有值,而 REMOTE_ADDR 可以通过代理进行修改。
所以我想当他们说存在安全漏洞时,这意味着当我将用户的输入插入数据库进行一些绑定时,我应该对其进行清理。
还有其他预防措施吗?
鉴于所有其他值都不可靠,我应该完全避免使用它们吗?
但是 REMOTE_ADDR 的非欺骗性值又如何呢?可以通过代理来修改。
关于我应该走哪条路有什么建议吗?
如果您想投反对票,或者投票关闭或删除问题,请给我留言说明原因,以便我改进我的问题。谢谢。
如何使用 PHP 获取客户端的 IP 和端口?
我尝试了下面的脚本,但它只给了我 IP 地址。
<?php print $_SERVER['REMOTE_ADDR']; ?>
Run Code Online (Sandbox Code Playgroud)