Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Корректная работа с сессией


Автор: tikitiki 20.11.2007, 15:46
Видимо данный вопрос вполне уместно задать в данном топике профессионалам. Т.к. бьюсь с этим вопросом очень давно (месяцы). Подобную тему я поднимал, то что ответили -понравилось и применял, но всё равно меня не устроило полностью решение вопроса, т.к. он и не решился вообще-то.
Дело в том, что при создании сайтов я использую вход-выход на сайт пользователей по логину и паролю как обычно. Но после выхода пользователя при переходе на предыдущие страницы -они опять начинают выполнять например добавление товара в корзину. Видел сайты, которые этим не страдают. Вопрос-как же правильно сделать? 
Делаю так-страницы связаны методом post через данные форм. Кнопка выхода ведёт на страницу, где стандартно разрушаю сессию и ещё и куки удаляю.

И что только не делал. Придумал один способ нестандартный-изменил текст программы-получилось,но зачем он нестандартный нужен!!! Мне советовали редирект применять на старницу какую-нибудь. Пробовал тоже. Но это же не избавляет от того, что пользователь нажмёт кнопку назад и опять получится тот же результат.
Как редирект использовать для правильного обновления страниц-разобрался, хотя к вопросу видимо это не имеет отношения. Я имею ввиду-чтоб данные повторно не отправлялись при отправке формы, например.
Последняя идея мне пришла в голову-хранить информацию о пользователях(логины-они же уникальные) в бд(использую mysql), а также вход и выход в полях бд для данного логина. Тогда при переходе на предыдущую страницу проверяем из бд делал ли выход пользователь с таким логином и если да, то показываем пустую страницу, например. Или лучше на главную страницу переправить. Данный метод видимо сработает, но я его полностью не протестировал пока. Применяют ли данный метод на самом деле и нужно ли его применять, если хочешь получить профессиональный сайт?
И как же всё-таки на самом деле поступают в данном случае пофессионалы?
Модераторам: это один вопрос, состоящий из небольших подвопросов.

Автор: Anarki 21.11.2007, 08:12
А при выходе сессия правильно уничтожается (сессия хранится на стороне сервера, а не у клиента) ? Куки бы тоже пользователям удалить не мешало бы. И там, где товар добавляется, да и вообще на всех страницах должна стоять проверка на какие-то данные сессии, что пользователь авторизирован. Если он назад нажмет то может форма у него и появится(из кеша браузера), но добавить он ничего не сможет или в этом и есть вопрос, чтобы вообще не показывать предыдущую страницу человеку, если он уже сделал выход? Решение такого врядли есть общее, потому как страницы браузер в кеш сохраняет и пользователь работает с локальной страницей. Можно попробовать кеширование отключить
Код

        header("Expires: Thu, 19 Feb 1998 13:24:18 GMT");
        header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
        header("Cache-Control: no-cache, must-revalidate");
        header("Cache-Control: post-check=0,pre-check=0");
        header("Cache-Control: max-age=0");
        header("Pragme: no-cache");

в начало скрипта

Цитата

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

Можно вполне обойтись сессиями.
В БД разве что хранят привилегии пользователей, пароли и какие-то ID, чтобы не было пароля в cookie, а только ID

Автор: tikitiki 21.11.2007, 20:08
Просто невероятно.

Цитата(Anarki @  21.11.2007,  13:12 Найти цитируемый пост)
И там, где товар добавляется, да и вообще на всех страницах должна стоять проверка на какие-то данные сессии, что пользователь авторизирован.


Вот проверку такую я как раз на всех страницах делаю и проверял и по идентификатору сессии, и по логину пользователя (в отдельности, а не вместе).
И ещё может как. Но всё равно проблема существовала и существует.
Приведу пример моих действий:
1) Ближе к началу программы (стараюсь вообще в начале)
Код

session_start(); 

далее может через несколько строк
проверку делаю например так
Код

if (isset($_POST['ses_login'])){
$sess_login=$_POST['ses_login'];
}
if (isset($sess_login)){
//echo 'isset($sess_login)';
}
if (!isset($_SESSION['login_session'])){
//echo '  login_session';
if (!isset($sess_login)){
//session_register("login_session");
//echo 'login_session'.$_SESSION['login_session'];
//echo '  pass';
//session_register("login_session");
exit();
}
}

А в скрипте для входа пользователя регистрирую переменную сессии и присваиваю ей логин пользователя из бд:
Код

session_register("session_login");
$_SESSION['session_login']=$login; 


Правда два эти участка программы получились не связанные. На других страницах у меня смотрел ещё запутанней проверка авторизации. Хотел привести код, но наверное не стоит запутывать. Когда-то проверка была проще, но постепенно разрослась.
Но я думаю, что проверка не должна быть причиной неправильной работы скрипта.
Ведь смысл проверки авторизации я понимаю не плохо. Не могу же я на всех страницах одинаково ошибаться, тем более что тестов и редактирований много делал.
Пустые страницы мне получать не обязательно. Мне бы добиться, чтоб формы после выхода пользователя не отправляли данные снова.
Спасибо большое за помощь.

Автор: tikitiki 22.11.2007, 14:37
Извиняюсь. Там выше участки программы получились не связанные, но на самом
деле были связаны. Переменная session_login у меня в другом скрипте приняла название login_session. Но это можно не считать за ошибку, т.к. я её видел и исправлял.
Видимо всё-таки дело не совсем в этих ошибках, а в чём-то другом-для меня пока не постижимом.
Цитата(Anarki @  21.11.2007,  13:12 Найти цитируемый пост)
В БД разве что хранят привилегии пользователей, пароли и какие-то ID, чтобы не было пароля в cookie, а только ID

Понятно. Но логины видимо можно хранить тоже. Читал вроде, что логины зашифрованные по крайней мере md5, вполне можно хранить в бд. А вход и выход-я так понял-не надо хранить.
Так в чём же может быть проблема всё-таки?

Добавлено через 11 минут и 6 секунд
Цитата(Anarki @  21.11.2007,  13:12 Найти цитируемый пост)
А при выходе сессия правильно уничтожается 

По-моему правильно. Делаю так:
Код

$sess_name=session_name();
$_SESSION = array();
unset($_COOKIE[session_name()]);
session_destroy();


Цитата(Anarki @  21.11.2007,  13:12 Найти цитируемый пост)
Можно попробовать кеширование отключить

Можно попробовать. Но это, если хочешь пустую страницу получить, когда пользователь вышел. А если всё-таки попробовать, то поможет ли это избавить от повторной отправки формы?

Автор: tikitiki 24.11.2007, 16:34
Более кратко выражу свою проблему. Может ли скрипт при локальном тестировании в win выдавать такую ошибку, а на сервере *nix исправно себя вести? И часто ли поведение скрипта на локальном пк отличается от поведения на хорошем платном хостинге? 
И хотелось бы очень увидеть  маленький, но правильный пример проверки авторизации пользователя при входе на страницу. Может мои проблемы будут решены.

Автор: Anarki 25.11.2007, 11:02
Цитата(tikitiki @  24.11.2007,  19:34 Найти цитируемый пост)
Может ли скрипт при локальном тестировании в win выдавать такую ошибку, а на сервере *nix исправно себя вести?

Какую? Показ всех ошибок включен? 
Выставить 
display_errors = On
error_reporting = E_ALL
и смотреть, может он что-то не может сделать с сессией
Цитата(tikitiki @  24.11.2007,  19:34 Найти цитируемый пост)
И часто ли поведение скрипта на локальном пк отличается от поведения на хорошем платном хостинге? 

Да, от разницы в версиях php,от его настроек, от включенного сейфмода, от того, привязан ли локальный скрипт к особенностям ОС и т.д.

Автор: Anarki 25.11.2007, 11:27
Пример.
При добавлении товара, а затем нажатии на выход, сессия уничтожается и если перейти назад с помощью кнопки браузера "назад", дойти до формы и вбить другой товар, то после нажатия на самбит, он перекинет на форму аутентификации, а товар не добавится.
Код

<?php
session_start();
if (!isset($_SESSION['id'])) {
    if (!isset($_POST['submit'])) {
        // show login form
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Login:&nbsp;<input type="text" name="login">
<input type="submit" name="submit" value="GO">
</form>
<?php
    } else {
        $_SESSION['id'] = $_POST['login'];
        header('Location: '.$_SERVER['PHP_SELF']); // редирект ибо по другому нельзя из-за структуры приложения этого :), чтобы не показывать пустую страницу
        exit();
    }
} else {
    $action = isset($_GET['action']) ? $_GET['action'] : '';
    if ($action == 'form') {
        if (isset($_POST['submit'])) {
            echo 'Товар '.$_POST['tovar'].' добавлен <a href="'.$_SERVER['PHP_SELF'].'">На главную</a>&nbsp; <a href="'.$_SERVER['PHP_SELF'].'?action=logout">Выход</a>';
        } else {
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>?action=form">
<input type="text" name="tovar">
<input type="submit" name="submit" value="Add to cart">
</form>
<a href="<?php echo $_SERVER['PHP_SELF'] ?>">На главную</a>
<?php        
        }
    } elseif ($action == 'logout') {
        $_SESSION = array();
        if (isset($_COOKIE[session_name()])) unset($_COOKIE[session_name()]);
        session_destroy();
        header('Location: '.$_SERVER['PHP_SELF']); // редирект, чтобы не было повторной отправки формы да и чтобы не показывать пустую страницу
        exit();
    } else {
        echo ' <a href="'.$_SERVER['PHP_SELF'].'?action=form">Форма</a>&nbsp; <a href="'.$_SERVER['PHP_SELF'].'?action=logout">Выход</a>';
    }
}
?>

Автор: tikitiki 30.11.2007, 00:42
Anarki, спасибо огромнейшее за пример!!  smile 
Отвечаю повышением твоей репутации конечно.
В примере всё понятно.
Но на всякий случай уточнить бы надо. Пример я так понял можно считать за полноценный скрипт, который можно использовать как есть.
Но вопрос один конкретный у меня остался: $_SESSION['id'] - везде в скрипте подразумеваем  - используется для хранения логина, введённого через форму методом POST($_POST['login'])?
И менее важный вопросик: методы GET и POST так и используем наравне в данном скрипте? Я в хорошем толмуте по php известных авторов читал, что GET почти не используется в современных скриптах по причине безопасности и может ещё каким.
Ещё раз спасибо.  smile 

Автор: Anarki 30.11.2007, 22:59
Цитата(tikitiki @  30.11.2007,  03:42 Найти цитируемый пост)
$_SESSION['id'] - везде в скрипте подразумеваем  - используется для хранения логина, введённого через форму методом POST($_POST['login'])?

Да. 

Цитата(tikitiki @  30.11.2007,  03:42 Найти цитируемый пост)
И менее важный вопросик: методы GET и POST так и используем наравне в данном скрипте? Я в хорошем толмуте по php известных авторов читал, что GET почти не используется в современных скриптах по причине безопасности и может ещё каким.

Для передачи форм? На самом деле совсем чуть усложняет жизнь злоумышленникам, если они захотят поискать дыры в скрипте. Т.к. тут нужно еще HTML код формы смотреть, но не более.
Метод GET для форм может применятся чтобы передавать 1-2 параметра скрипту, например поисковая форма, там очень часто используется метод GET.
Наверное правильней мне было бы сделать так: сделать новое поле 
Код

<input type="text" name="action" ...

и убрать из action формы строку запроса. А в скрипте получать action из $_GET, либо пытаться получить его из $_POST, если в $_GET нет action.

Автор: tikitiki 1.12.2007, 03:58
Anarki, спасибо. 
Попробую применить.

Автор: tikitiki 10.12.2007, 04:19
Anarki, если прочитаешь, то ответь. Я скрипт твой отдельно в файле тестировал. Но первый редирект от начала скрипта по-моему не совсем на своём месте стоит. Или не знаю в чём дело. Но скрипт не всё делает так как надо. Для того, чтоб увидеть ссылки на форму и на выход-надо обновлять страницу(если убрать первый редирект) и т.д.

Автор: Anarki 16.12.2007, 17:34
Первый редирект стоит верно. Т.к. отправили форму - выполнили перенаправление: Установилась переменная сессии id, перенаправление, проверка существует ли id в $_SESSION, если да,то начал работать блок приложения с выводом формы. 

Вообщем я переписал кое - что, без редиректа теперь работает.
Код

<?php
session_start();
if (!isset($_SESSION['id'])) {
    if (!isset($_POST['submit'])) {
        // show login form
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
Login:&nbsp;<input type="text" name="login">
<input type="submit" name="submit" value="GO">
</form>
<?php
        exit(); // вывели форму логина и завершили приложение
    } else {
        $_SESSION['id'] = $_POST['login'];
    }
}
$action = isset($_GET['action']) ? $_GET['action'] : '';
if ($action == 'form') {
    if (isset($_POST['submit'])) {
        echo 'Товар '.$_POST['tovar'].' добавлен <a href="'.$_SERVER['PHP_SELF'].'">На главную</a>&nbsp; <a href="'.$_SERVER['PHP_SELF'].'?action=logout">Выход</a>';
    } else {
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>?action=form">
<input type="text" name="tovar">
<input type="submit" name="submit" value="Add to cart">
</form>
<a href="<?php echo $_SERVER['PHP_SELF'] ?>">На главную</a>
<?php        
    }
} elseif ($action == 'logout') {
    $_SESSION = array();
    if (isset($_COOKIE[session_name()])) unset($_COOKIE[session_name()]);
    session_destroy();
    header('Location: '.$_SERVER['PHP_SELF']); // редирект, чтобы не было повторной отправки формы да и чтобы не показывать пустую страницу
    exit();
} else {
    echo ' <a href="'.$_SERVER['PHP_SELF'].'?action=form">Форма</a>&nbsp; <a href="'.$_SERVER['PHP_SELF'].'?action=logout">Выход</a>';
}
?>

Всё ли понятно?

Автор: Feldmarschall 16.12.2007, 17:47
Забавный топик

Автор: tikitiki 16.12.2007, 18:09
Anarki, протестирую-скажу.
Feldmarschall, для меня не очень забавный.))))

Добавлено через 11 минут и 19 секунд
Anarki, код понятен. Надо протестировать. Да и первый код был понятен. Почему-то не протестировался нормально.

Автор: Feldmarschall 16.12.2007, 18:28
Сначала по вопросам tikitiki.
Судя по описанию, твоя проблема, насколько я понимаю, состоит в том, что ты не проверяешь - а зарегистрирован ли у тебя пользователь, который кладет товар в корзину (хотя, вообще-то, в корзину должны мочь класть как раз, анонимы, но пока предволожим, что только авторизованные пользователи)
То есть, нету проверки, как у Anarki, на if (!isset($_SESSION['id'])) {
только этим можно объяснить, что у тебя программа продолжает что-то добавлять после убивания сессии.

Ну, или тем, что сессию ты не убиваешь. но здесь я хочу поговорить о второй твоей ошибке. 
Ты описываешь только то, что сделал, напимер - session_destroy();
А как ты проверил результат - ни слова.
Но ведь программа не всегда работает так, как хочет автор!
Поэтому все свои действия налдо проверять.
В твоем случае - открыть другую страницу и попробовать вывести содержимое сессии.

Теперь по мелочи.
Если ты думаешь, что кодом unset($_COOKIE[session_name()]); ты уничтожаешь куки, то тебе надо хорошенько подтянуть начальный курс веб-программирования, протокол HTTP и основы взаимодействия браузера с сервером.
Как минимум - почитать документацию по http://php.net/setcookie
а удаление переменной в PHP скрипте смысла никакого не имеет. Эта переменная все равно через долю секунды исчезнет, так что unset($_COOKIE[session_name()]); - код совершенно бессмысленный.

Функцию session_register нельзя использовать. она устарела. Код 
session_register("session_login");
$_SESSION['session_login']=$login; 
вообще не имеет смысла. надо писать только вторую строчку. И пользоваться только массивом $_SESSION, как это делает Anarki.

Цитата(tikitiki @  21.11.2007,  20:08 Найти цитируемый пост)
 Мне бы добиться, чтоб формы после выхода пользователя не отправляли данные снова.


Этого добиться невозможно.
Твой скрипт должен не обрабатывать такую форму. а запретить посылать форму нельзя.

Цитата(tikitiki @  22.11.2007,  14:37 Найти цитируемый пост)
Понятно. Но логины видимо можно хранить тоже. Читал вроде, что логины зашифрованные по крайней мере md5, вполне можно хранить в бд.


Логин, разумеется, хранят в базе. Anarki просто забыл его написать.
MD5 - это не шифр, и логин этой функцией не обрабатывают. обрабатывают, иногда - пароль.

Цитата(tikitiki @  30.11.2007,  00:42 Найти цитируемый пост)
Я в хорошем толмуте по php известных авторов читал, что GET почти не используется в современных скриптах по причине безопасности и может ещё каким.


Либо авторы "талмуда" дураки, либо ты их не понял. GET и POST используются там, где каждый из методов нужен. Причем GET используется гораздо чаще, чем POST.

Добавлено через 13 минут
Anarki, ты поторопился с кодом.
Товарищ говорит загадками.
Ты его спрашиваешь - какую проблему, а он твой вопрос игнорирует. И правильно - зачем утруждаться, что-то объяснять .если гоовый код уже дали?
Дальше опять туманные намёки:  "скрипт не всё делает так как надо". что делает, как делает? Непонятно. 
Вместо того, чтобы вместе разобраться - делаем кривой скрипт, который пишет "Внимание: страница устарела".

Зачем идти на поводу у начинающего? Зачеп портить нормальные скрипты? Зачем плодить заплатки? 
Надо, чтобы человек разобрался в проблеме. А не утащил очередной готовый код без малейшего понимания, как он работает.

Автор: tikitiki 16.12.2007, 18:53
Feldmarschall, спасибо за развёрнутый ответ. Я не думал, что ты ответишь. Про функцию session_register удивил, что устарела. Остальное ясно, хотя тоже новое почерпнул. Про то, что логины не надо md5 обрабатывать-тоже оказалось для меня открытием. В общем спасибо. Мне надо всё это будет учесть.
Насчёт того, что проверяю ли я, что пользователь зарегистрирован, который кладёт товар в корзину-да я проверяю-ищу в бд логин (это мое собственное решение было, может не правильно). Если логина нет-значит не регистрировался пользователь. Для логинов создал таблицу бд-с логинами, паролями в MD5,  другой информацией-e-mail и др. В этой таблице и делаю поиск.
Да. Всё-таки спрошу. Можно ли страницы связать методом POST-через формы или способом без отправки формы-при этом в скрытом поле передать логин пользователя и на каждой странице проверять это поле для того, чтоб знать какой пользователь зашёл на страницу (опять же способ отчасти мой, может не верный). 
В общем неувязок много у меня. Прошу помочь распутать.

Автор: Feldmarschall 16.12.2007, 19:09
Цитата(tikitiki @  16.12.2007,  18:53 Найти цитируемый пост)
Насчёт того, что проверяю ли я, что пользователь зарегистрирован, который кладёт товар в корзину-да я проверяю-ищу в бд логин 


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

А если вместо проверки по базе просто вывести на экран логин - он выведется?
А ты уверен, что код проверки по БД у тебя правильный? А то у начинающих много разных хороших способов проверки, таких, например, как 
$result=mysql_query();
if ($result) echo "логин есть!";

Цитата(tikitiki @  16.12.2007,  18:53 Найти цитируемый пост)
. Можно ли страницы связать методом POST-через формы 

Нет, нельзя. во-первых, потому, что страницы надо связывать методом GET - он для этого и предназначен.
Во-вторых, потому, что логин нельзя передавать от пользователя. Логин должен быть только на сервере. Для этого и существуют сессии -чтобы хранить данные на сервере

А неувязки давай сюда. Я как раз специализируюсь на их распутывании.
Меня, в частности, интересует, что именно неправильного было в работе первого кода от Anarki

Автор: tikitiki 16.12.2007, 19:52
Feldmarschall, ты не ошибся. Код именно такой, как ты говоришь. И работает после удаления сессии. Логин тоже выводится на страницу. Я много раз проверял при тестировании. И код проверки по бд-я думаю -правильный. 
Про то, что логин надо на сервере хранить-понятно. Но почему ты говоришь, что при этом нельзя использовать метод POST? Я сначала авторизую пользователя на сайте с помощью проверки есть ли логин в бд, затем уже сохраняю в переменную сессии логин и затем можно передать в скрытом поле методом POST формы или ещё как-то (передать переменную сессии от страницы к странице видимо не проблема).
Насчёт первого кода Anarki - код я понял, он мне понятен. Извиняюсь, что не написал подробно сразу. Но я его когда тестировал в отдельном скрипте, то при вводе логина происходил переход на ту же страницу с вводом логина. Видимо так и надо-пользователь вошёл, а форма авторизации осталась. Но дело в том, что я разными способами не смог добиться, чтоб увидеть на странице ссылки на главную страницу, на форму и на выход. Редирект я убрал в качестве теста-после этого появились данные ссылки, но логика работы скрипта стала не совсем  такой, как должно быть, хотя похоже. Здесь описывать полностью работу скрипта видимо долго. Меня сильно удивило-но я не понял, что не так. 

Автор: Anarki 16.12.2007, 20:02
tikitiki, 
было бы намного проще, действительно, не строить туманные догадки, а посмотреть исходный код, который работает не так как надо.

Автор: Feldmarschall 16.12.2007, 20:07
Так.
Ты хочешь сказать, что после убиения сессии логин все равно выводится?
С этого, пожалуй, и надо начинать, отбросив все остальное в сторону, как лишнее.
вообще-то, это очень странно. Выходит, что сессия не убивается.
Скажи, ты сам можешь написать код, демонстрирующий такой эффект? Чтобы в нем не было ничего лишнего, а только 4 шага - на первом записываем значение в сессию, на втором - выводим, на третьем - убиваем (и выводим), на четвертом - снова выводим.

А зачем передавать логин методом POST, если он и так передается в сессии?
Почему нельзя - я уже писал: логин должен быть только на сервере. А не передаваться от пользователя методом POST.

Со скриптом Anarki стало понятно. С этим тоже надо разобраться, но позже. 

Вообще - странно как-то у тебя ведет система. Если последняя ошибка понятная, в общем-то, то неубивание сессии - это очень странно. Я пока предполагаю какой-то косяк в логике твоих скриптов. Только не могу понят - какой. В общем, тестовый скрипт очень не помешает

Автор: tikitiki 16.12.2007, 20:23
Здесь пока два файла. Может ещё какие-нибудь надо. Их много...

Автор: tikitiki 16.12.2007, 20:30
Feldmarschall, логин после убиения сессии может не выводится. Я не проверял. А то, что скрипт добавляет товар -я это проверил, с помощью того, что скрипт выводит, что товар добавлен в корзину. Занеслась ли информация в бд-затрудняюсь сказать (может и проверял)- но по логике моего скрипта занеслась. 

Автор: Feldmarschall 16.12.2007, 22:15
Я не обнаружил ни в одном из файлов команды session_destroy.
Следовательно, ответ прост - ты просто не удаляешь сессию. Как я и думал, проблема была в самом скрипте. Увы, от таких ошибок форум помочь не в состоянии. Или программист понимает, что он пишет - или нет.
Для лучшего понимания рекомендую перед тем, как писать программу, рисовать её логику на бумаге.

Что делает куча кода в начале скрипта orders, разбираться лень. Проще написать, что там на самом деле должно быть
Код

session_start();
if(!isset($_SESSION["login"])){
  exit;
}

Всё. Больше ничего не надо.

Код login.php переписать так, чтобы он работал только с массивом $_SESSION. Причем так, чтобы имена ключей не совпадали с именами локальных переменных. К примеру, если есть переменная $login, то в $_SESSION не должно быть элемента $_SESSION["login"]. Пусть это будет $_SESSION["login_name"]

Там же сделать код выхода, который удаляет $_SESSION["login_name"]

Добавлено @ 22:17
По поводу кода Аnarki. Скорее всего, у тебя не передается идентификатор сессии с локейшеном. Это бывает на локальных машинах.

Автор: tikitiki 16.12.2007, 23:09
Feldmarschall, спасибо. Видимо всё так. Но session_destroy есть в другом файле. Я сразу не соориентировлся какие файлы надо включить.

Автор: Feldmarschall 16.12.2007, 23:11
видимо, до этого файла просто дело не доходит

Автор: tikitiki 16.12.2007, 23:13
Цитата(Feldmarschall @  17.12.2007,  03:15 Найти цитируемый пост)
Скорее всего, у тебя не передается идентификатор сессии с локейшеном.

Я здесь не понял, что под локейшеном подразумевается.

Автор: Feldmarschall 16.12.2007, 23:20
   header('Location: '.$_SERVER['PHP_SELF']); - вот это

Автор: tikitiki 16.12.2007, 23:28
Цитата(Feldmarschall @  17.12.2007,  04:11 Найти цитируемый пост)
видимо, до этого файла просто дело не доходит 

Feldmarschall, посмотрел-сейчас может быть на самом деле до этого файла не доходит. Я искал по имени файла. Но выход был -файлы есть. И вроде работал.

Автор: Feldmarschall 16.12.2007, 23:37
"вроде" или работал?
Ты кого сейчас уговариваешь - себя или меня? Меня бесполезно - у меня проблем с сессиями нет.
Себя - можешь, конечно. Но программа твоя от этого не заработает.
Я считаю, что все "вроде" надо проверить. И убедиться. Как это сделать - я тебе писал: проверить наличие логина в сессии. Ты этого делать не хочешь. Я тебя заставить не могу. Можем продолжить светскую беседу на форуме.

Добавлено через 2 минуты и 45 секунд
Я бы на твоем месте начал с того, чтобы переписал всю работу с сессиями заново. прочитав сначала документацию по ним.
Причем не встраивая сразу в свой готовый сайт, а сделав тестовую модель - файло с логином, файл с корзиной, другие нужнгые файлы. 
И проверил работу на них.
А когда все заработает - переносил бы код в стпрые файлы.

Автор: tikitiki 16.12.2007, 23:40
Здесь три файла с выходом. Какие-то из них были связаны. Почему три-так получилось. Что по ним можно сказать?

Автор: tikitiki 16.12.2007, 23:45
Цитата(Feldmarschall @  17.12.2007,  04:37 Найти цитируемый пост)
Я считаю, что все "вроде" надо проверить. И убедиться. Как это сделать - я тебе писал: проверить наличие логина в сессии. Ты этого делать не хочешь. Я тебя заставить не могу. Можем продолжить светскую беседу на форуме.

Добавлено через 2 минуты и 45 секунд
Я бы на твоем месте начал с того, чтобы переписал всю работу с сессиями заново. прочитав сначала документацию по ним.
Причем не встраивая сразу в свой готовый сайт, а сделав тестовую модель - файло с логином, файл с корзиной, другие нужнгые файлы. 
И проверил работу на них.
А когда все заработает - переносил бы код в стпрые файлы. 

Я вот это теперь и буду делать. Просто я не совсем понимал-какие шаги надо делать. 

Автор: Feldmarschall 16.12.2007, 23:45
По ним видно, как работала твоя мысль.
Неплохо, кстати, сказать, работала.
самый нормальный - exit3

Но все равно, я тебя очень прошу, после того, как ты завершаешь сессию, выведи, пожалуйста, содержимое массива $_SESSION на странице order3

Автор: tikitiki 16.12.2007, 23:55
Цитата(Feldmarschall @  17.12.2007,  04:45 Найти цитируемый пост)
после того, как ты завершаешь сессию, выведи, пожалуйста, содержимое массива $_SESSION на странице order3 

Чтобы протестировать, что в массиве $_SESSION пусто?
Feldmarschall, остальное всё из твоих руководств ясно. Я думаю, что их достаточно, чтоб действовать.

Добавлено через 1 минуту и 46 секунд
Файл присоединённый случайно цепляется. )

Автор: Feldmarschall 17.12.2007, 00:06
Да, именно для этого.
Вообще, если у тебя файл order3 работает именно тот, который в архиве, то я не удивлюсь вообще никакому поведению скрипта. Там такой бардак... Я понимаю, отчего он произошел - от твоих попыток решить проблему. И это нормально. Но разобраться там очень сложно. Ты ещё пренебрегаешь очень важным средством написания программ - оступами. 
Разобраться в коде без отступов гораздо сложнее, чем с ними.

Автор: tikitiki 17.12.2007, 00:10
Отступы учту. Спасибо на добром слове.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)