Perl 如果人们共享相同的IP地址,Cookie不准确?

Perl 如果人们共享相同的IP地址,Cookie不准确?,perl,cookies,session-cookies,Perl,Cookies,Session Cookies,当用户A连接到我的网站时,我会在该用户的浏览器中设置一个cookie,以识别他,并跟踪他根据自己的行为交付内容所做的事情 当用户B连接并来自同一IP地址时,用户B将获得用户A的cookies,反之亦然。由于web服务器看到的是一个用户而不是多个用户,因为多个用户来自同一IP,所以Cookie似乎混淆了 只有一组使用同一ISP的用户才会出现此问题。此ISP为多个帐户/用户分配相同的IP地址(和主机名)。(许多人共享一个IP)如果来自同一IP的同一ISP的两个人(或更多)出现在我的站点上,那么coo

当用户A连接到我的网站时,我会在该用户的浏览器中设置一个cookie,以识别他,并跟踪他根据自己的行为交付内容所做的事情

当用户B连接并来自同一IP地址时,用户B将获得用户A的cookies,反之亦然。由于web服务器看到的是一个用户而不是多个用户,因为多个用户来自同一IP,所以Cookie似乎混淆了

只有一组使用同一ISP的用户才会出现此问题。此ISP为多个帐户/用户分配相同的IP地址(和主机名)。(许多人共享一个IP)如果来自同一IP的同一ISP的两个人(或更多)出现在我的站点上,那么cookie操作似乎在他们之间共享,这会导致问题

当来自同一IP(共享IP地址)的单个用户出现cookie无法正常工作时,如何准确跟踪这些用户?也许问题来自于所讨论的ISP

SSL能解决这个问题吗?也许是我做饼干的方式

我在下面用Perl发布了一个关于如何设置cookie的示例:

use CGI;
$q = CGI->new;

### the routine &get_random_number used below is a unique random number 
### generator that also uses $ENV{HTTP_USER_AGENT} for entropy
### &get_random_number returns a unique number (session id)
$session_id = &get_random_number; 

$thecookie1 = $q->cookie(-name=>'something', -value=> $session_id );
print $q->header(-cookie => $thecookie1); 
这是读取cookie的代码:

use CGI;
$q = CGI->new;
$thecookie = $q->cookie('something');
本文中解释的情况只发生在特定的ISP上(使用此ISP的所有用户都来自同一IP且具有相同的主机名)-ISP与多个用户共享一个IP。该ISP为手机提供移动互联网。

更新1:

我相信这一定与ISP实现的缓存代理服务器有关,因为这只发生在ISP上

为了解决这个问题,我做了以下几点:(问题发生的次数急剧减少)-我做的最后一次更改 没有添加缓存元标签到页面设置cookies,我希望完全解决了这个问题。时间可能会证明一切

在页面设置cookies中,我执行以下操作:

print $q->header(-type=>'text/html',
-Pragma=>'no-cache',
-Cache_Control=> 'no-store,no-cache,must-revalidate,post-check=0,pre-check=0',
-expires=>'now -1d',
-cookie=> $cookie
); 

print qq[
<head>
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" /> 

etc... etc...
];
print$q->header(-type=>“text/html”,
-Pragma=>“无缓存”,
-Cache_Control=>“无存储,无缓存,必须重新验证,后检查=0,预检查=0”,
-expires=>'now-1d',
-cookie=>$cookie
); 
打印qq[
等等…等等。。。
];
更新3:

升级Apache似乎解决了这个问题,但问题又回来了。我确实解决了它,但解决它的唯一方法是将所有内容移动到https://


转到https://solved it period.

Cookies与IP地址无关,它们是在客户端创建的,并链接到浏览器。例如,如果用户使用Chrome登录到您的网站,他们将拥有与使用IE在同一台计算机(和IP地址)上登录不同的cookie集

我建议您的问题可能与您在cookies中放入的内容有关,这完全取决于您和您的代码


你试过使用会话吗?在PHP中,只需调用session_start(),然后在$\u session变量中设置数据


如果您发布一些您正在做的示例代码,我可能会给您一个更具体的答案。

Cookies与IP地址无关,它们是在客户端创建的,并链接到浏览器。例如,如果用户使用Chrome登录到您的网站,他们将拥有与使用IE在同一台计算机(和IP地址)上登录不同的cookie集

我建议您的问题可能与您在cookies中放入的内容有关,这完全取决于您和您的代码


你试过使用会话吗?在PHP中,只需调用session_start(),然后在$\u session变量中设置数据


如果您发布一些您正在做的示例代码,我可能会给您一个更具体的答案。

我怀疑这些用户共享一个缓存代理。确保禁用包含
Set Cookie
头的响应缓存。我们通过如下方式输出CGI头来实现这一点:

print header(-type=>'text/html', -expires=>'now -1d', -cookie=>\@cookies);

我怀疑这些用户共享一个缓存代理。确保禁用包含
Set Cookie
头的响应缓存。我们通过如下方式输出CGI头来实现这一点:

print header(-type=>'text/html', -expires=>'now -1d', -cookie=>\@cookies);

我知道您认为Apache更新解决了这个问题,但我向您保证,这并不是“修复”它的原因。升级Apache刚刚导致对您的配置进行了一些更改,如果恢复原始配置,新版本中也会再次出现问题。换句话说,这当然不是您看到的Apache bug,而是您如何配置它的问题


基本上,看起来您遇到了这样一种情况:Apache除了设置或替换您通过Perl设置的缓存头之外,还设置了自己的缓存头。您可能是通过
mod_头文件
或通过
mod_expires
mod cache
的错误配置来执行此操作的,我知道您认为Apache更新解决了此问题,但我向您保证这不是“修复”它的原因。升级Apache刚刚导致对您的配置进行了一些更改,如果恢复原始配置,新版本中也会再次出现问题。换句话说,这当然不是您看到的Apache bug,而是您如何配置它的问题


基本上,看起来您遇到了这样一种情况:Apache除了设置或替换您通过Perl设置的缓存头之外,还设置了自己的缓存头。您可能是通过
mod\u headers
mod\u expires
mod cache

的错误配置来执行此操作的。我不确定这个问题是否真的可以回答。我们对您的环境了解得还不够,不能说。你怎么做饼干?可能是这样。可能是他们的ISP在缓存和代理方面做了一些肮脏的事情。不要基于IP广告设置cookie