Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   redirect + cookie (https://javascript.ru/forum/css-html/71859-redirect-cookie.html)

icqprophet 18.12.2017 07:31

redirect + cookie
 
Добрый день

Подскажите как можно реализовать редирект с использованием cookie.

Задача состоит в том, что бы пользователь при посещении сайта, перейдя на следующую страницу (№2) с текущей (№1), не мог вернуться на страницу №1 - срабатывал редирект на страницу №2 и так далее.

Заранее благодарен!

ksa 18.12.2017 08:54

Цитата:

Сообщение от icqprophet
как можно реализовать редирект с использованием cookie

Например так:
- записывать в куки "номер" текущей страницы
- при попадании на страницу считывать из куки номер страницы
- если нужно, делать редирект на другую страницу

icqprophet 18.12.2017 09:36

Цитата:

Сообщение от ksa (Сообщение 473140)
Например так:
- записывать в куки "номер" текущей страницы
- при попадании на страницу считывать из куки номер страницы
- если нужно, делать редирект на другую страницу

Логика примерно понятна, если не затруднит, можно кусок кода для наглядности?

ksa 18.12.2017 10:31

Цитата:

Сообщение от icqprophet
можно кусок кода для наглядности?

Не совсем понятно про какой именно "кусок" идет речь... :-?
Вот как работают с куками...
https://learn.javascript.ru/cookie

Вот так можно сделать "редирект"...
top.location='новый_URL';

ksa 18.12.2017 10:32

Вот так работает оператор IF
https://javascript.ru/IF

Nexus 18.12.2017 10:36

Цитата:

Сообщение от ksa
- при попадании на страницу считывать из куки номер страницы

лучше до попадания на страницу редиректить, т.к. js в браузере может быть отключен.

icqprophet 18.12.2017 11:33

Если все правильно понял то, как то так получается?

Код не авторский, собран из выдачи в гугле + свои додумки.
В JS не силен, подскажите такая конструкция будет работать?

function set_cookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure )
{
  var cookie_string = name + "=" + escape ( value );
  if ( exp_y )
  {
    var expires = new Date ( exp_y, exp_m, exp_d );
    cookie_string += "; expires=" + expires.toGMTString();
  }
  if ( path )
        cookie_string += "; path=" + escape ( path );
  if ( domain )
        cookie_string += "; domain=" + escape ( domain );
  if ( secure )
        cookie_string += "; secure";
  document.cookie = cookie_string;
}
function get_cookie ( cookie_name )
{
  var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)' );
  if ( results )
    return ( unescape ( results[2] ) );
  else
    return null;
}
    var s=location.href;
    var st = s.substr(s.lastIndexOf("/")+1);
    var current_date = new Date();
    var cookie_year = current_date.getFullYear ( ) + 1;
    var cookie_month = current_date.getMonth ( );
    var cookie_day = current_date.getDate ( );
   if ( (! get_cookie ( "cookieName" )) && ( st  == "index.html")  )
   {
    set_cookie ( "cookieName", "1", cookie_year, cookie_month, cookie_day );
   }
   if ( ( st  == "1.html")  ){
    set_cookie ( "cookieName", "2", cookie_year, cookie_month, cookie_day );
   }
   if ( ( st  == "2.html")  ){
    set_cookie ( "cookieName", "3", cookie_year, cookie_month, cookie_day );
   }
	var check = get_cookie ( "cookieName" );

if ( (check == "1") && !( st  == "index.html") ){
	top.location = "index.html";
	}
if ( (check == "2") && !( st  == "1.html") ){
	top.location = "1.html";
	}
if ( (check == "3") && !( st  == "2.html") ){
	top.location = "2.html";
	}

ksa 18.12.2017 13:30

Цитата:

Сообщение от icqprophet
такая конструкция будет работать?

Ее работоспособность ты можешь проверить самостоятельно...

Но сами конструкции громоздкие.

Nexus 18.12.2017 13:36

Функция для работы с cookies:
function cookie(name,value,days){
	if(value){
		var expires="";
		if(days){
			var date=new Date();
			date.setTime(date.getTime()+(days*24*3600*1000));
			expires="; expires="+date.toGMTString();
		}
		document.cookie=name+"="+value+expires+"; path=/";

		return true;
	}else{
		var nameEQ=name+"=";
		var ca=document.cookie.split(';');
		for(var i=0;i<ca.length;i++){
			var c=ca[i];
			while(c.charAt(0)==' ') c=c.substring(1,c.length);
			if(c.indexOf(nameEQ)==0) return c.substring(nameEQ.length,c.length);
		}

		return null;
	}
};

//cookie('test_cookie');//Получить значение куки по наименованию или null
//cookie('test_cookie','some string');//Записать куку до конца сессии
//cookie('test_cookie','some string',1);//Записать куку на 1 день


Часовой пояс GMT +3, время: 08:52.