session had already been started вопрос вокруг повторного запуска сессии

Статус
В этой теме нельзя размещать новые ответы.

yok

Новичок
session had already been started вопрос вокруг повторного запуска сессии

Всем привет.

Среда:
Под авторизованного пользователя для доступа к определенным страницам создается сессия.

На каждой странице предусматривается выход пользователя из сессии и в случае наличия сессии ее поддержание:

-------------------------------------------------------------------
if( (isset($_GET['logout'])) && ($_GET['logout']=="now") ) {
session_start();
session_unset();
session_destroy();
}
if (isset($_REQUEST[session_name()])) {
//if( (isset($_REQUEST[session_name()])) && (!isset($_GET['out'])) ) {
session_start();
}
-----------------------------------------------------------------------------------

при error_reporting(E_ALL) наблюдается ситуация: САМ КОНФЛИКТ:
после выхода из сессии пользователя, фактический доступ закрывается, но если повторный вход осуществить то нотис : a session had been started-ignoring session_start()

Да, добавлю ясно что при авторизации страртуется сессия.
и конечно сессия страртуется не всегда и не для всех страниц.

Прошу реальной помощи, вероятно что ктото такую задачу решал, и в этой теме Бресь Сергей, чтото подобное решал, и аж в 2004 году, мож поможет разобраться. http://phpclub.ru/talk/showthread.php?s=&threadid=55083&perpage=20&highlight=session&pagenumber=1

А теперь мой один взгляд:

Когда на стороне сервера приходит запрос на логоаут, также и подтверждение $_REQUEST[session_name()], потом удаляются переменные сессии, и доступ пользователя уже закрывается под его переменными сессии, но если в этот момент уже после дестроя сессии на стороне сервера в скрипте обьявить переменную любую сессии, то эта переменная будет существовать.

Конечно как она туда попадет эта новая переменная сессии, не знаю, но это уже подвергает сомнению.

Это уже как расширение моего вопроса, вытекающего из того, что после дестроя сессии, по запросу f( (isset($_REQUEST[session_name()])) следующему ниже в сценарии она всеравно стартуется. Конечно уже без прежних переменных сессии????

Вот о таком кто мучался вопросом, прошу помощи.

Конечно если при повторной авторизации, перед вводом логина и отправкой, удалить куки с сессией, то нотиса не будет и будет все окей, (хотя тестировалось локально, надо проверить хост)

Всем хорошего дня.

По поводу новой переменной сессии вот код
error_reporting(E_ALL);
if (isset($_GET['out'])) {
session_start();
session_unset();
session_destroy();
}

$_SESSION['name']="newname"; // вот обьявляю новую после дестроя и она будет log не будет потому что дестрой предыдущей серии.
echo "<hr>";
echo $_SESSION['log'];
echo $_SESSION['name'];
?>
 

yok

Новичок
*****, (чтото тебя не отображает Фа-ат) изначально в коде стоял редирект, я его убрал чтоб не смушать лишним. Сейчас еще убедился , прежде чем писать, упростил код до минимума, два файла

1первый
-------------------------------------------------------------------
<?php
error_reporting(E_ALL);
if(isset($_POST['login'])) {
session_start();
$_SESSION['log']=$_POST['login'];
}

if(isset($_SESSION['log'])) {
echo $_SESSION['log'];
}
?>
<form method="POST" action="">
<input type=text name="login">
<input type=submit value=send>
</form>
<hr>
<a href="next.php?out">next</a>
---------------------------------------------------------------------
и сам next.php
-------------------------------------------------------------
<?php
error_reporting(E_ALL);
if (isset($_GET['out'])) {
session_start();
session_unset();
session_destroy();
Header("Location: куда нибудь где нет сессий/");
exit();
}

$_SESSION['name']="newname";

echo $_SESSION['log'];
echo "<hr>";
echo $_SESSION['name'];
?>
-----------------------------------------------
я в индексе делаю переменную $_SESSION['log'], submit-ом, потом иду по ссылке в next.php?out
там дестрою сессию, и перенаправляюсь где нет сессий, а потом, возврашаюсь вводя в адрес просто next.php и вижу отображение вновь регистрируемой переменной $_SESSION['name'], а 'log' уже дестроена.
Получается пока куки есть на клиенте, сессия все равно остается??? и естественно если в этот момент, сколько не блуждай по сайту, даже если на страницах нет сессий, если потом ввести логин и в скрипте стартовать сессию, она будет с нотисом о повторном старте.
Вот о чем я. Как быть???
 

Фанат

oncle terrible
Команда форума
да откуда там нотис о повтором старте-то? ты несешь какую-то совсем несуразицу.

"нотис о повторном старте" означает только вызов session_start(); два раза при выполнении одного и того же скрипта. взять и убрать эти повторные вызовы - 10 секунд. о чем тут столько рассусоливать текстами на 5 экранов - загадка.

а "старта сессии" в том смысле, который ты вкладываешь в это словосочетание, в природе не существует. почитал бы что ли http://phpfaq.ru/session
 

yok

Новичок
Понимаю, много трудно читать. Давай отойдем от вопроса повторного старта, думал понятно. Вот перепроверил все сейчас.

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

<?php
$_SESSION['newname']="Newname";
echo $_SESSION['newname'];
?>
Больше там ничего нет. И Newname я увидел, теперь разжевал, а твою ссылку я давно уж перечитывал сто раз.

Я просто показал, что такая ситуация существует, и даже не хочется продолжать, а то опять не поймешь, ну для других напишу, сорри

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

SiMM

Новичок
PHP:
if( (isset($_GET['logout'])) && ($_GET['logout']=="now") ) {
  session_start();
  session_unset();
  session_destroy(); // !!!
}
if (isset($_REQUEST[session_name()])) { // !!!
  session_start();
}
[m]session_destroy[/m]
It does not unset any of the global variables associated with the session, or unset the session cookie.
 

yok

Новичок
SiMM вот и я о том же. Значит мне надо куки убивать или как и пишет сервер игнорирование повторного старта сессии это нормально. Не стоит заморачиваться об этом. Это нормальная практика. Попробую разобраться с дестроем и окружением, мож кто сориентирует куда смотреть точнее.
 

yok

Новичок
Fortop это просто констатация факта существования сессии в этот промежуток времени.

Задача убить все чтобы этот код не вывел переменную сессии
 

SiMM

Новичок
> Fortop это просто констатация факта существования сессии в этот промежуток времени.
Ерунда это, а не констатация.
 

Фанат

oncle terrible
Команда форума
гыгы. какая прелесть
ну вот что с ними делать? прошлого чувака послал. Потом долго себя корил за это.
Надо, вроде, терпеливо объяснять. Но как ведь объяснять, если он тебя жалеет? :)

И все держится за свое определение старта сессии как "запись в пустую сессию первой переменной". и при этом полагает, что сообщение об ошибке пишет ему об этом же. ну умора ведь.
 

Fortop

Новичок
yok, я сам бывал в ситуациях, когда ошибался и чего-то там доказывал. Но, право же, с такой регулярностью наступать на грабли....
Это уже не первый топик, где Вы за деревьями леса не видите.

Сессии работают несколько иначе чем Вам представляется.
$_SESSION это всего лишь суперглобальный массив, который при наличии сессии автоматически заполняется при старте скрипта и сохраняется в момент завершения скрипта.

Но до тех пор пока сессии нет он практически ничем не отличается от любого другого массива

-~{}~ 09.04.10 13:57:

А для правильной проверки наличия данных в сессии, после записи значения, нужно сделать редирект и попытаться прочитать сохраненное значение.
 

yok

Новичок
Во Фан-ат , точно как ты где то писал, ну что ты к словам прицепился. только читал, жаль потерял ссылку.

Виш как возвращается.

Так как убить все, чтобы небыло сообщения о повторном старте сессии.

Вкратце все.
Создана сессия, потом if($_GET['logout'])
session_start();
session_unset();
session_destroy();
потом ухожу на другие сайты эксперимент был на 2 минуты, возвращаюсь на страницу с двумя строками
---------------
<?php
$_SESSION['newname']="Newname";
echo $_SESSION['newname'];
?>
-----------------------
как убить все чтобы не вывело $_SESSION['newname']

Вот конкретно КАК???

-~{}~ 09.04.10 15:04:

Fortop
-----------------------
А для правильной проверки наличия данных в сессии, после записи значения, нужно сделать редирект и попытаться прочитать сохраненное значение.
-----------------------------------
Выше же написано в самом начале что переменные сессии убиваются и не доступны, ( приведен пример кода) это не вопрос.
Читайте внимательней.

-~{}~ 09.04.10 15:06:

error_reporting(E_ALL);
if (isset($_GET['out'])) {
session_start();
session_unset();
session_destroy();
}

$_SESSION['name']="newname"; // вот обьявляю новую после дестроя и она будет log не будет потому что дестрой предыдущей серии.
echo "<hr>";
echo $_SESSION['log']; //это не выведет !!!!
echo $_SESSION['name'];
?>
 

SiMM

Новичок
Код
PHP:
<?php
$_SESSION['newname']="Newname";
echo $_SESSION['newname'];
?>
настолько хорошо демонстрирует, что Вы таки не поняли, что написал Fortop, что даже давать правильный ответ на вопрос
как убить все чтобы не вывело $_SESSION['newname']
совершенно бессмысленно - Вы его всё равно не поймёте.
 

Fortop

Новичок
yok, в 39 лет поздновато учить то, к чему "нема хисту".

---------------
<?php
$_SESSION['newname']="Newname";
echo $_SESSION['newname'];
?>
-----------------------
как убить все чтобы не вывело $_SESSION['newname']
Читайте внимательней...!!!
Fortop
Но до тех пор пока сессии нет он практически ничем не отличается от любого другого массива
Hint:
PHP:
<?php
$myvar['newname']="Newname";
echo $myvar['newname'];
?>
И перефразируя "классика"

как убить все чтобы не вывело $myvar['newname']
Вот конкретно КАК???
 

Фанат

oncle terrible
Команда форума
Так как убить все, чтобы небыло сообщения о повторном старте сессии.
сообщение о повторном старте сессии появляется не потому что в сессии что-то "не убито"
тема закрыта
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху