Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当Googlebot爬网站点时禁用会话_Php_Session_Googlebot_Google Search Appliance - Fatal编程技术网

Php 当Googlebot爬网站点时禁用会话

Php 当Googlebot爬网站点时禁用会话,php,session,googlebot,google-search-appliance,Php,Session,Googlebot,Google Search Appliance,我的PHP5.3服务器正在处理带有use_only_cookies但没有use_trans_id的会话,会话文件保存在专用目录中 当Googlebot、Google Search appliance bot或任何其他不支持cookie的浏览器对网站进行爬网时,会为每个请求的页面创建不同的会话文件。恐怕这些文件会白白占用大量磁盘空间 是否可以为某些用户代理或不使用cookie的浏览器禁用会话文件?我不想用trans_id特性替换会话,因为它可能有SEO缺陷 是否存在Apache/PHP指令、设置或

我的PHP5.3服务器正在处理带有use_only_cookies但没有use_trans_id的会话,会话文件保存在专用目录中

当Googlebot、Google Search appliance bot或任何其他不支持cookie的浏览器对网站进行爬网时,会为每个请求的页面创建不同的会话文件。恐怕这些文件会白白占用大量磁盘空间

是否可以为某些用户代理或不使用cookie的浏览器禁用会话文件?我不想用trans_id特性替换会话,因为它可能有SEO缺陷

是否存在Apache/PHP指令、设置或任何其他技巧来实现以下行为:

  • 如果浏览器不支持cookie(通过用户代理黑名单或其他方法),那么我们总是使用相同的会话文件,或者根本不使用会话文件
  • 对于任何其他浏览器,请使用标准会话文件处理程序

当然,您可以检查
$\u服务器['HTTP\u USER\u AGENT']
的内容,并检查已知的机器人程序。如果它是一个bot,那么就不要调用
session\u start()
(尽管如果您的逻辑依赖于
$\u session
的话,这可能会产生不必要的影响,更深入的代码)。

当然,您可以检查
$\u服务器['HTTP\u用户\u代理]
的内容,并检查已知的bot。如果它是一个bot,那么就不要调用
session\u start()
(尽管如果您的逻辑依赖于
$\u session
的话,这也可能会产生不必要的影响,因为它会在代码的下面变长)。

If(strpos($\u SERVER['HTTP\u USER\u AGENT',“Googlebot”)==false){
会话_start();
}


但我不确定这是否值得。会话GC非常有效,如果有人将用户代理重写为googlebot,他就不会有会话(strpos($\u SERVER['HTTP\u user\u agent',“googlebot”)==false){
if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot")){
    $sid = md5("mygooglebotsessionid");
    session_id($sid);
}
会话_start(); }


但我不确定这是否值得。会话GC非常有效,若有人将用户代理重写为googlebot,那个么他就并没有会话了

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot")){
    $sid = md5("mygooglebotsessionid");
    session_id($sid);
}
在会话_start()之前添加此项

您可以为bot设置唯一的SessionID,而不是禁用bot的会话。每次bot都使用相同的SessionID,因此不会浪费会话存储空间

PS:不确定SEO的缺点

在会话_start()之前添加此项

您可以为bot设置唯一的SessionID,而不是禁用bot的会话。每次bot都使用相同的SessionID,因此不会浪费会话存储空间


PS:我不确定SEO的缺点。

…而且我从不过分担心会话数据填满服务器。PHP非常擅长在幕后管理这一点。这可能适用于大多数网站。但当你的网站有几十万个页面时,谷歌机器人每天可能会抓取20k个页面,每天创建20k个新的会话文件。如果你将会话保存一周,单从谷歌机器人就可以获得约140k个会话,另外还有其他机器人的会话。另一方面,我们每天只有几百个独特的人类用户。因此,99%的会话文件来自机器人!我明白你的意思,这是非常正确的。不过,自从我最初回答这个问题以来,我就意识到页面爬行越来越复杂。最近的一个例子是谷歌的手机可用性分析,它直接影响你在手机上的搜索排名。如果Googlebot被拒绝了一个会话,并且没有该会话会使您的页面变得不可用/执行速度变慢等,那么这对您的页面排名可能是一件非常糟糕的事情。@ButtleButkus另一种可能性也会出现:您可以检测到哪个用户代理正在访问该站点,并为爬虫分配一个较短的会话生存期。(我假设ini_集合允许访问会话生存期)。这样你就两全其美了——谷歌机器人获得了你网站的正确版本,但你的服务器不会被过多的会话文件堵塞。我认为你不能在同一个文件夹中有不同的会话生存时间,但如果你将机器人和常规会话保存在不同的文件夹中,这是可能的。不过,据我所知,这样做毫无意义,因为网络爬虫无论如何都不接受cookies。如果你的网站的可用性依赖于cookies,那么你的网站将根本不适用于网络爬虫!我们想要阻止网络爬虫的会话,正是因为他们不接受我们发送给他们的cookies,所以他们在每次页面访问(=每天数千次)时都会启动一个新会话……而且我从来没有过多担心会话数据填满服务器。PHP非常擅长在幕后管理这一点。这可能适用于大多数网站。但当你的网站有几十万个页面时,谷歌机器人每天可能会抓取20k个页面,每天创建20k个新的会话文件。如果你将会话保存一周,单从谷歌机器人就可以获得约140k个会话,另外还有其他机器人的会话。另一方面,我们每天只有几百个独特的人类用户。因此,99%的会话文件来自机器人!我明白你的意思,这是非常正确的。不过,自从我最初回答这个问题以来,我就意识到页面爬行越来越复杂。最近的一个例子是谷歌的手机可用性分析,它直接影响你在手机上的搜索排名。如果Googlebot被拒绝了一个会话,并且没有该会话会使您的页面变得不可用/执行速度变慢等,那么这对您的页面排名可能是一件非常糟糕的事情。@ButtleButkus另一种可能性也会出现:您可以检测到哪个用户代理正在访问该站点,并为爬虫分配一个较短的会话生存期。(我假设ini_集合允许访问会话生存期)。这样你就可以两全其美了——googlebot获得了你网站的正确版本,但你的服务器不会被过多的会话文件堵塞。我认为你不能在同一个文件夹中有不同的会话生存期,但这可能是错误的