Forum Webscript.Ru
Программирование => PHP => Тема начата: dub от 20 Января 2004, 11:16:58
-
На сервере хостера выложил php-скрипт. При ПЕРВОЙ загрузке страницы (когда страница еще не в кеше или типа того), ко всем относительным ссылкам непонятно с какой стати добавляется хвост ?Visitor=...
Пример: ссылка вида
< a href=/missruss/home >home< / a >
заменяется на
< a href=/missruss/home?Visitor=4f477b79e069ec50c625ef66ed6a79fb >home< / a >
Скрипт использует mod_rewrite, хотя я и не уверен, что это как-то относится к проблеме. Важно то, что mod_rewrite используется для ЧПУ, а значит нельзя такому скрипту просто взять и передать какую-то лишнюю GET-переменную. Такая ссылка просто перестает работать.
Повторю, что эта переменная добавляется только первый раз. То есть для того, чтобы отследить эту проблему, надо:
1) закрыть браузер
2) открыть браузер
3) загрузить страницу
Если же эту страницу Обновить, то хвост ?Visitor=... больше не появляется.
Хостер съезжает на ошибку в скрипте, но скрипт я писал сам, нет там ничего подобного. С чем это может быть связано? Apache? mod_rewrite? Обработчик PHP?
Заранее спасибо.
-
Visitor...
Похоже на сессии
-
Это ID сессии. в php.ini включен параметр session.use_trans_sid. не обращай внимания. Так и должно быть.
-
CGVictor:
Похоже на сессии
А подробнее? Сессии я использую тоже. Но на локальном хосте у меня проблем с относительными ссылками от этого не возникало. Если проблема с настройками сессии, то где - в скрипте или в php.ini у хостера?
-
Лучше у него и спросить... Мне кажется, у него стоит session_autostart с переменной visitor.
-
Diesel:
в php.ini включен параметр session.use_trans_sid
Так-с, это уже похоже на правду. Но проблема в том, что мои относительные ссылки с этим хвостом не работает, потому как обрабатываются они скриптом index.php, на который перекидываются mod_rewritом. Короче, ссылки должны сохранять точный внешний вид для правильной обработки и лишние GET-переменные все сильно портят.
Вопрос: как этот параметр отключить?
-
в php.ini или в .htaccess
-
Или
ini_set() (http://www.php.net/manual/ru/function.ini-set.php) ?
Для начала попробую уломать хостера выключить параметр в php.ini. По дефолту он "0". Плюс - Security Level и все такое.
AliMamed
Как это сделать в .htaccess пока не знаю. Буду искать инфу, если есть ссылка под рукой - кинь plz.
-
dub Это не в коем случае не нужно отключать. Иначе у тебя не будут работать сесси, если отключены куки. я с mod_rewrite не работал, помочь не могу, но уверен что эта проблема должна решаться не выключением параметра.
-
AliMamed
Судя по всему, имелось в виду следующее:
To disable register_globals you have to set:
php_value register_globals 0
В моем случае
php_value session.use_trans_sid 0
php_value.. Точно. Запамятовал. Спасибо.
Diesel
http://www.php.net/manual/en/ref.session.php#ini.session.use-trans-sid
session.use_trans_sid boolean
session.use_trans_sid whether transparent sid support is enabled or not. Defaults to 0 (disabled).
Note: For PHP 4.1.2 or less, it is enabled by compiling with --enable-trans-sid. From PHP 4.2.0, trans-sid feature is always compiled.
URL based session management has additional security risks compared to cookie based session management. Users may send an URL that contains an active session ID to their friends by email or users may save an URL that contains a session ID to their bookmarks and access your site with the same session ID always, for example.
В свете вышеизложенного мне не особо-то и надо, чтобы сессии работали с отключенными кукисами. Если чел логинится на мой сайт, значит ему туда надо. Если ему туда надо - пусть разрешит куки. Мой куки подписан.
-
именно эту переменную через ini_set изменять нельзя. про php_value - правильно
-
AliMamed:
именно эту переменную через ini_set изменять нельзя
Ага. Точно.
session.use_trans_sid "0" PHP_INI_SYSTEM|PHP_INI_PERDIR
PHP_INI_PERDIR 2 Entry can be set in php.ini, .htaccess or httpd.conf
PHP_INI_SYSTEM 4 Entry can be set in php.ini or httpd.conf
С помощью .htaccess палучылас. Спасибо еще раз.
-
dub Если чел заботится о том чтоб никто под его аккаунтом не зашел, пусть жмет "выход", когда уходит. Для того что бы убить сессию есть session_destroy(); Отключать куки это параноя, но гоаорить "Пусть включает куки если хочет на " мой сайт, это все равно что "Пусть ставит IE чтоб смотреть мою страничку"
-
Diesel
Развитие темы рискует перерасти во флейм.
-
dub:
Важно то, что mod_rewrite используется для ЧПУ, а значит нельзя такому скрипту просто взять и передать какую-то лишнюю GET-переменную.
Это если мод-реврайт без ума использовать.
dub:
Развитие темы рискует перерасти во флейм.
Да, грозит. Если автор вопроса не понимает, что такое сессии, и зачем они ему.
похоже, что товарисч счетчичек решил с помощью сессий завести.
В жизни, человека, который кувалдой сапожный гвоздик забивает в детский сандалик, как на идиота посмотрят. А в пхп все можно - божья роса!
-
RomikChef
М-да. Даешь. Не ожидал я подобной агрессии, да и сути наезда, честно говоря, не понял. Ладно, по существу твоих заявлений, придется парировать, деваться некуда.
RomikChef:
Это если мод-реврайт без ума использовать.
mod_rewrite использую с умом. Для ЧПУ, как сказано выше. mod_rewrite передает любой запрос на обработку скрипту index.php. index.php обрабатывает $_SERVER[\'REQUEST_URI\'] по собственной логике, в соответствии с содержанием БД, в которой прописаны разделы и подразделы. $_SERVER[\'REQUEST_URI\'] разбивается на составляющие разделителем "/". Я мог бы конечно отсекать от последней составляющей все символы, начиная с "?", но с какой, собственно, стати? В некоторых подразделах, кроме прочего, использоваие символов "?", "=", "&" тоже предусмотрено, таким образом, в частности передаются переменные для поиска. Главная мысль вот в чем: если я устанавливаю ссылку как "/dir/subdir", то хочу, чтоб она выглядела именно так.
RomikChef:
Да, грозит. Если автор вопроса не понимает, что такое сессии, и зачем они ему.
похоже, что товарисч счетчичек решил с помощью сессий завести.
Зачем мне сесии я знаю точно. Они мне для аутентификации. Счетчик ни при чем. И сандалик тоже. В данном контексте считаю правильным успользование кукисов.
Если я не прав в чем - конструктивная критика приветствуется. А просто желчью брызгать - ИМХО неконструктивно.
-
AliMamed
Папинька согласился :)
Hello,
We have reset it to the default value.
Thank you.
-
если ты делал это осмысленно - то бог с тобой.
Я объясню, почему я решил, что используется это для счетчика.
просто дело в том, что РНР - язык самодокументируемый.
поэтому принято, что имя переменной отражает ее содержание.
Если идентификатор сессии передается переменной с аббривеатурой слов "идентификатор сессии РНР", то сразу ясно - что в переменной идентиикатор сессии.
А если передается слово "посетитель" - то весьма резонно предположить, что передается идентификатор посетителя.
А именно тольо в счетчиках единственной осмысленной информацией в ид сессии будет как раз идентификатор уникального посетителя.
Только не говори мне, что пхпсессид на визитор заменил хостер тоже.
В этом случае я выражу тебе и твоему сайту глубокие и искренние соболезнования.
-
RomikChef:
Только не говори мне, что пхпсессид на визитор заменил хостер тоже.
В этом случае я выражу тебе и твоему сайту глубокие и искренние соболезнования.
Секунду.
-
RomikChef
Блин, сам себя запутал. PHPSESSID на Visitor сам же и заменил. Сделал это с самого начала, давно уже, когда сессию для режима залогиненного посетителя делал (еще режим админа есть). Чтоб, типа, пользователи куков не пугались. И сам об этом забыл напрочь. И поэтому когда этот самый PHPSESSID появился в качестве GET-переменной под именем Visitor, благополучно его не узнал. Даже о сессиях не подумал сразу. И морочу всем голову. Правда про trans_sid я все равно не знал, спрашивать было о чем, но формулировка по моей вине получилась уж больно замороченная.
-
CGVictor:
Мне кажется, у него стоит session_autostart с переменной visitor
Сразу посмотреть, конечно, было сложнее. Вот что бывает, когда люди пишут только для того, чтобы что-нибудь написать.
-
CGVictor
Меня в твоем ответе как раз session_autostart и сбил. Для установки имени я использовал session_name(). session_autostart я не использовал.
-
dub:
И морочу всем голову
Теперь все ОК?
-
CGVictor
:) Блин, ну ты злой. Ну согласился же уже, ошибочка вышла. Кода много написано было, этот участок писался давно. Да и годы уже не те, всего не упомнишь. Ну случайно, ну шутя... сбился с верного путя. А тут налетели вороны, заклевали дедушку-склеротика.
Да, теперь все ОК. Всем спасибо.