我正在做一个用户必须进入网站的基本网站,如果是第一次访问,那么他/她会看到一些信息。我不想使用cookie,因为并非所有用户都会启用cookie。 IP的问题在于它主要是动态的,所以也不是很有效。
另外,我可以使用任何库吗?
答案 0 :(得分:1)
IP无法识别用户。它只是标识网络上的节点(防火墙,NIC等)。没有使用cookie,真的没有办法在全球范围内说出来。您必须在他们的机器上存储一些东西,以便将它们返回到您的应用程序。出于安全原因,浏览器是匿名的。人们必须自愿识别某些东西。
我解决这个问题的方法是在MySQL中记录用户的交互以及他们的会话。我检查他们是否使用Javascript以及是否启用了Cookie。如果他们启用了cookie,那么我会向他们传递一个唯一的ID。如果他们不这样做,我就会忽略这些数据。如果他们确实打开了cookie或javascript,那么我将在数据库中创建其他标志。在他们提交个人识别信息时,我可以将他们的记录与存档的其他信息配对。
通过类似于亚马逊的[地址]栏传递$ _GET变量,有一种老式的方法。您还可以使网站上的所有按钮和链接都使用POST表单(但这更令人痛苦)。除非您对信息进行散列并继续向前传递,否则您无法信任该信息。始终检查哈希值以确保它们不会改变查询行。
因此,如果您传递的是用户ID,那么您将拥有一个可以像这样工作的地址栏:
<?php
function addrAppend($uid){
//secret word would be something that you know so it works like a pre-shared key.
$hash = md5($uid."secretword".$_SERVER['REMOTE_ADDR']);
$app="?uid=$uid&hash=$hash";
return $app;
}
?>
请注意,如果您正在散列用户的IP地址并且他们正在使用代理,则此操作将失败。你可以随时改写他们的操作系统。
我讨厌这样做内联,因为它不是好的形式,但是当你在布局中调用它时你可以说: '&gt;我的链接
对于下一页的检查和验证,您可以执行以下操作:
if(!empty($_GET['hash'])){
if ($_GET['hash']==md5($temp_UID."secretword".$client_ADDR)){
//then it's unaltered assuming they didn't guess your hashing convention
} else {
//then they altered the get vars so flush the info or end().
}
}
}
答案 1 :(得分:0)
对于那些使用现代网络浏览器的人使用localStorage:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
答案 2 :(得分:0)
如果您想构建专业级跟踪解决方案。您可以存储用户的以下信息:
当然,你不需要所有这些。其中一部分(例如IP
,Screen resolution
,UserAgent
)作为用户的指纹就足够了。
我怎么知道?
之前使用过Cross browser fingerprinting
技术。你可以在这里阅读更多:
http://fingerprint.pet-portal.eu/
事实上,即使他改变了浏览器,你也可以跟踪实际入境与回归用户!
答案 3 :(得分:-1)
IP是识别用户的最佳方式。它可以明显改变,但这就是它的真实方式。