Forum Webscript.Ru
Программирование => PHP => Тема начата: Yukko от 11 Января 2004, 15:08:35
-
Перечитывал на досуге http://faq.phpclub.net/sessions и вот, возникло предложение добавить одну строку.
После слов:
Поэтому надо добавлять СИД руками, например, так:
header("Location: /script.php?".SID);
добавить
exit;
Владелец faq ты, и ты можешь не согласиться, но на той же странице в примере сверху:
И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:
session_start();
if ($_SESSION[\'authorized\']<>1) {
header("Location: /auth.php");
exit;
}
exit; в примере присутсвует.
И не по теме, просто наблюдения.
Хотя по правилам
header("Location: bla.php");
exit;
PHP Version 4.3.4 на Apache 1.3.23 (Linux) спокойно прекращает выполнение скрипта (я поставил ниже редиректа запрос к БД, который ее апдейтит)
IIS 5.0 PHP Version 4.3.2 (Win2K server) впадает в ступор (продолжает выполнять скрипт).
Мало того, PHP Version 4.3.4 на Apache 1.3.23 (Linux) вполне нормально разбирает ошибочную строку запроса типа
http://mono/my.php?user=yukkoPHPSESSID=19ebca8bd62c830d3e79272b4f585ff8 правильно забрав значение user=yukko и идентификатор сессии. IIS же отрабатывает user=yukkoPHPSESSID=19ebca8bd62c830d3e79272b4f585ff8 :)
-
ну, с первым я, конечно, не соглашусь.
ибо это не пример кода, а пример функции.
Если к каждой функции всегда приписывать то, что обычно идет за ней, это во-первых, будет слишком раздувать код, а во-вторых, будет банально отвлекать внимание.
про ступор, если честно, ничего сказать не могу - не сталкивался.
в последнем примере, если пхп переменной юзер присвоил значение юкко. то он разобрал строку неправильно.
-
RomikChef:
ну, с первым я, конечно, не соглашусь.
второе больше, как комментарий-размышления, все равно в скрипте осталось
header("Location: bla.php");
exit;
и строка передана правильно...
А вот насчет первого... я передал СИД через редирект без exit; (стормозил, не подумал), линукс выполнил нормально, кинул на ISS, сразу понял, что в скрипте ошибка, потому что редиректа как такового не происходит, но ошибок никаких не выдает. Я набрал адрес твоего faq, посмотреть на пример, прочитал ту часть, где ты пишешь про то, как РНР добавляет автоматом, но при редиректе надо добавлять руками. exit; я там не нашел, но ошибка от этого не исчезла, я обратился к ману, где все английским по бэкграунду написано.
Хотя у меня на все ушло около 5-ти минут, но у кого-то на это уйдет не один день, вот и решил обратиться к тебе. faq новички читают, написано header("Location: bla.php"); они в скрипт вобьют именно так, как написано. Редко кто даже краткий фак читает от начала до конца. Я подумал, что фраза "не забудьте добавить exit; после header("Location: ");" будет нелишней.
Собственно вот и весь ход моих мыслей.
-
Yukko
по поводу IIS попробуй слать
1. указывать полный путь (http://.....)
2. перед header("Location: ..." ) слать
header("Status: 302 Temporary redirect") - точный текст не помню (HDD со всей документацией накрылся :() глянь в доке по HTTP
-
Макс
у меня нет никаких проблем... у меня все отлично работает. :)
Топик я начал из-за того, чтобы фак Ромика был еще более понятнее для тех, кто его читает :) все остальное размышления.
Ромик свою позицию объяснил, я объяснил почему я это написал. :) :) :) в любом случае спасибо за участие.