[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: СКРИПТ НЕПРАВИЛЬНО РАБОТАЕТ ДЛЯ GOOGLE CHROME
asminog
Добрый день.

Вкраце объясню ситуацию. Пишу навигацию для сайта с одной точкой входа. Некоторые, важные для работы самой навигации переменные, сохраняю в сессиях. Эти переменные модифицируются при каждом обращении к обработчику навигации по ссылке вида mysite.dom/функция.

Так вот, во всех броузерах, включая преславутый ИЕ 6, навигация работает замечательно, а вот гуглевское творение каким-то образом вмешивается в работу серверной программы (сайта) и нарушает ее алгоритм, в результате чего навигация хотя и работает некоторым образом, но не так как должна.

Например, когда постранично пролистываешь список нажимая на ссылку "Далее" или "Назад" (читай - mysite.dom/more или mysite.dom/less), сессионные переменные модифицируются не правильно или вообще не модифицируются...
Законный вопрос: какого черта переменные, объявленные мной - изменяются хромом?!

Не знаю даже куда и копать-то...

Может кто-то сталкивался с чем-то подобным?..



Спустя 1 час, 37 минут, 49 секунд (5.11.2011 - 16:45) Invis1ble написал(а):
Сильно сомневаюсь, что проблема в браузере. Т.к. браузер не может каким-то образом "модифицировать" сессию, это исключительно прерогатива сервера.
Скорее всего у тебя алгоритм бажный (может js кривой).

Спустя 26 минут, 47 секунд (5.11.2011 - 17:12) asminog написал(а):
Цитата (Invis1ble @ 5.11.2011 - 13:45)
Скорее всего у тебя алгоритм бажный (может js кривой).

Возможно, так как только начал писать этот скрипт. JS не использую (пока-что). Но ситуация такая: сохраняю в сессии букву; жму на ссылку, страница перезагружается, но вместо буквы
в этой переменной оказывается какой-то левый favicon.ico, который я нигде не использую.

Спустя 4 минуты, 8 секунд (5.11.2011 - 17:16) Invis1ble написал(а):
Значит либо где-то перезаписываются данные, либо ты криво их выводишь.
Экстрасенсов тут нет, показывай код, если у кого-то будет время - может кто и подскажет.

Спустя 9 часов, 43 минуты, 18 секунд (6.11.2011 - 03:00) asminog написал(а):
В общем, проблема с хромом в моем случае решилась установкой в начало файла такой строки:

<?php
if(mb_eregi('(Chrome)',$_SERVER['HTTP_USER_AGENT'])){ini_set("session.use_cookies",0);ini_set("session.use_trans_sid",1);}
session_start();
..........................
...........................
...............................

?>

Только в таком режиме он работает как и все остальные броузеры. Во всех других случаях сессионная переменная перезаписывается на FAVICON.ICO

Спустя 9 часов, 24 минуты, 47 секунд (6.11.2011 - 12:24) Invis1ble написал(а):
Это явно не нормальное решение проблемы.

Спустя 1 час, 10 минут, 10 секунд (6.11.2011 - 13:35) asminog написал(а):
Цитата (Invis1ble @ 6.11.2011 - 09:24)
Это явно не нормальное решение проблемы.

А как бы вы ее решили? К мудрым советам я прислушиваюсь.

Может с хромом куками надо работать?..

Спустя 8 минут, 46 секунд (6.11.2011 - 13:43) Invis1ble написал(а):
Трудно сказать точно, не зная алгоритма. Вероятно, у тебя просто криво настроен браузер.

Спустя 6 минут, 11 секунд (6.11.2011 - 13:49) asminog написал(а):
Цитата (Invis1ble @ 6.11.2011 - 10:43)
Трудно сказать точно, не зная алгоритма. Но скорее всего у тебя просто криво настроен браузер.

Вот тут-то и загвоздка. А если он не только у меня, но еще и у 90% остальных пользователей настроен криво? Именно с такими настройками он устанавливается по умолчанию.

Хотелось бы как-то обойти эту обусловленность от настроек клиента.

Спустя 1 минута, 34 секунды (6.11.2011 - 13:51) Invis1ble написал(а):
Ну я же написал выше, что нет экстрасенсов тут.
Покажи код, вполне возможно, что у тебя ошибка в алгоритме где-то.

Спустя 1 час, 3 минуты, 37 секунд (6.11.2011 - 14:55) asminog написал(а):
Кода - много. Не могу же я выложить сюда все?.. Попробую обяснить.

Любой GET-запрос перенаправляется mod_rewrite на index.php, и вся строка запроса сохраняется в переменной $_GET['str']. Вот примерное содержимое index.php:


/*ИНИЦИАЛИЗАЦИЯ САЙТА*/
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
/*КОНСТАНТЫ*/
define('DS',DIRECTORY_SEPARATOR);
define('ROOT',realpath(dirname(__FILE__)));
$_SESSION['stack']['num_row']+=0;
$str=mb_convert_encoding(trim($_GET['str']),'UTF-8');

switch($_SERVER['REQUEST_METHOD']) {
case "GET":
$action=array(
'purchase','add_user_link','shop','create','forum','write',
'search','in','out','list_forvard','list_back'
);
require_once(ROOT.DS."inc".DS."main_get.php");
break;
}
require_once(ROOT.DS."inc".DS."html.php");


Содержимое main_get.php для опции list_forvard, которая отвечает за прокрутку списка вперед.
Вызов этой опции происходит с помощью ссылки /list_forvard.
Если строка запроса отлична от элементов массива $action или пуста, то выполняется действие по умолчанию, зависимое от совпадения по regexp.

switch($opt) {
/*ЛИСТАТЬ ВПЕРЕД*/
case "list_forvard":
$_SESSION['stack']['num_row']+=2;
$str_search=$_SESSION['stack']['liter'];
$str=$_SESSION['stack']['liter'];
break;
/*ЛИСТАТЬ НАЗАД*/
case "list_back":
$_SESSION['stack']['num_row']-=2;
$str_search=$_SESSION['stack']['liter'];
$str=$_SESSION['stack']['liter'];
break;
/*ДЕЙСТВИЕ ПО УМОЛЧАНИЮ*/
default:
if(($str=='')&&$_SESSION['stack']['liter']=='') {
$str='А';
$str_search=$str;
$_SESSION['stack']['liter']=$str;
}
if(($str=='')&&($_SESSION['stack']['liter'])!='') {
$str_search=$_SESSION['stack']['liter'];
}
if(mb_eregi('^(.)*([a-zA-Zа-яА-Я])$',$str)) {
$_SESSION['stack']['liter']=mb_strtoupper($str);
$str_search=$_SESSION['stack']['liter'];
$_SESSION['stack']['num_row']=0;
}
elseif(mb_eregi('^(.)+',$str)){
$str_search=$str;
$_SESSION['stack']['liter']=mb_strtoupper(mb_substr(0,2,$str));
$_SESSION['stack']['num_row']=0;

}
break;
}

В файле html.php литера $_SESSION['stack']['liter'], список ссылок и ссылки "Вперед - Назад" выводятся так:


echo "<h2>$_SESSION['stack']['liter']</h2>\n<ul>";
if(($my_links>0)&&($my_links!=false)) {
foreach($my_links as &$my_link) {
if(empty($my_link)){unset($my_link);}
echo "<li><a target=_blank href='http://".$my_link['link_address']."'/>".$my_link['link_name']."</a></li>";
}
}

echo "<p style='position:absolute;font-size:13px;top:9em;left:0.7em;'>";
if(($_SESSION['stack']['num_row'])>0)
echo "<a href='/list_back' style='color:#333;text-decoration:none;margin-right:1em;'>назад</a>";
if(($_SESSION['stack']['num_row']+2)<($count_rows))
echo "<a href='/list_forvard' style='color:#333;text-decoration:none;'>вперед</a>";
echo "<a style='position:relative;color:#975;top:-1.3em;left:17.5em;text-decoration:none;display:block;' href='/add_user_link'>добавить ссылку</a>";
echo "</p>";
echo "</ul>\n";


В хроме это не работает.

Спустя 2 часа, 50 минут, 5 секунд (6.11.2011 - 17:45) asminog написал(а):
Все уже работает. Причина была в отсутствии break в действии по умолчанию.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.