是的事实上可能是这样的你只要启动程序(有session_start()的),就会产生一个session_id
cookie为sid随机数但取不到值,也不能通过验证 机器人访问和用户访问没有区别

解决方案 »

  1.   

    看是不是机器人,可以看apache日志
      

  2.   

    可以用$_SERVER['HTTP_USER_AGENT']来判断,搜索引擎都都自己的名字,比如:google是"googlebot",baidu是"baiduspider",sohu是"sohu-search"等等
      

  3.   

    对于普通的,这些限制还有点效果,但是如果是恶意的爬虫就难办了,cookie,useragent都可以伪造,不过有点是比较肯定的,就是爬虫不会支持css和js,如果你有些特殊的保密数据建议用js加密:)
      

  4.   


    验证机器人的方法只能通过HTTP_USER_AGENT来判断。
    如果机器人支持了cooike,同样可以支持session,
    但是通常情况下,搜索蜘蛛都会向服务器发出一个正确的USER_AGENT,以区别自己的身份。
    相反,如果从HTTP_USER_AGENT判断不出来,那么也没有判断蜘蛛的其他方法。
      

  5.   

    就像jazzyfree 说的,可以看agent,
    通常都是这样的 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)或者你用phpinfo看看也能发现很多能用的地方。主要都是看header。
      

  6.   

    就像jazzyfree 说的,可以看agent,
    通常都是这样的 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)或者你用phpinfo看看也能发现很多能用的地方。主要都是看header。
      

  7.   

    看是不是机器人,可以看apache日志
      

  8.   

    给你代码好了
    function getrobot() {
    if(!defined('IS_ROBOT')) {
    $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla';
    $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla';
    if(preg_match("/($kw_browsers)/", $_SERVER['HTTP_USER_AGENT'])) {
    define('IS_ROBOT', FALSE);
    } elseif(preg_match("/($kw_spiders)/", $_SERVER['HTTP_USER_AGENT'])) {
    define('IS_ROBOT', TRUE);
    } else {
    define('IS_ROBOT', FALSE);
    }
    }
    return IS_ROBOT;
    }