Не могу изменить идентификатор сессии

Nexus341

Новичок
Не могу изменить идентификатор сессии

Добрый вечер!
Помогите изменить идентификатор сессии
PHP:
session_id()
.
Делаю как написано в мануале, но видимо где то ошибаюсь или что то не так понял.
Предположим
PHP:
$id
- содержит нужное мне значение.
Вот кусочек кода:

PHP:
<?php
PHP:
$id = "dfbb0928632e2203803ab0f33586553a";
PHP:
session_id($id);
PHP:
echo session_id();
PHP:
session_start();
PHP:
echo session_id();
PHP:
?>
В результате получаю:

dfbb0928632e2203803ab0f33586553a 7c84378d53548cf160f2d33d31f9b9c1

До начала сессии идентификатор тот что мне нужно, но стоит ее открыть и он меняется на случайный. Подскажите как открыть сессию с нужным мне значением
PHP:
session_id()
?
 

dimagolov

Новичок
врешь и не краснеешь. начнем с того, что твой код не может выводить пробел между id

-~{}~ 06.07.09 17:17:

ну а кроме того лично у меня он все устанавливает.
 

Nexus341

Новичок
Вот мой код в котором этого не происходит. Разница лишь в том что
PHP:
$id
принимает значение строки (идентификатора сессии) из файла , который записывается в файл если он пустой.

PHP:
<?php
$user = $_POST["user_name"];
	    if($user == "vova"){
		$fp = fopen ("vova.txt" , "r" ) or die ("don't open file");
		    $id = (fgets ($fp, 1024));
		fclose($fp);
		
	    }
	    if(!empty($id)){ 
		
		
		session_id($id);
		echo session_id();
		session_start();
		
		echo session_id();
		include("conf1.php");
		exit;
		
		}
		else
		{
		
		session_start();
		$ses = session_id();
		$ff = fopen("vova.txt","w") or die ("don't open file");
		fwrite($ff,"$ses ");
		fclose($ff);
		}
		
	    $_SESSION['logged_user']=$_POST["user_name"];
	    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
	    $_SESSION['quest1']="quest";
?>
 

SiMM

Новичок
> Помогите изменить идентификатор сессии
Позвольте полюбопытствовать, зачем?
 

Nexus341

Новичок
Автор оригинала: SiMM
> Помогите изменить идентификатор сессии
Позвольте полюбопытствовать, зачем?
Допустим есть 10 страниц с какой нибудь информацией.
1 - странница авторизации. Если она прошла успешно, пользователь попадает на вторую, третью, и т.д. В итоге он остановился на седьмой и у него сел ноут/телефон. Он решает зайти с другого ноута/телефона, проходит авторизацию....а там вместо 7 -ой страницы опять красуется вторая.
Суть примерно такая.
 

Nexus341

Новичок
Автор оригинала: zerkms
и откуда ты тогда берёшь искомый sid?
После авторизации имя пользователя введенное в форме сравнивается с тем что есть в коде.
При совпадении открывается файл с одноименным названием. Оттуда берется первая строчка(она и единственная). Эта строчка присваивается в качестве значения к
PHP:
$id
.Далее смотрим если
PHP:
$id
пустая начинаем новую сессию. К
PHP:
$ses
присваиваем тот SID который нам выдался и записываем его в файл (файл изначально пустой). При повторной авторизации (того же пользователя) из этого файла мы получим нужный нам SID.
 

SiMM

Новичок
> Он решает зайти с другого ноута/телефона, проходит авторизацию....а там вместо 7 -ой страницы опять красуется вторая.
Пардон, а какое это имеет отношение к смене идентификатора сессии?
 

Nexus341

Новичок
Автор оригинала: *****
с какой стати вторая-то?
При повторной авторизации открывается новая сессия с новым SID пусть для того же пользователя.
А в новой сессии не будет тех сессионных переменных которые бы подсказали php где этот пользователь был раньше =)

-~{}~ 07.07.09 17:37:

Может тогда подскажите как это реализовать по другому?

-~{}~ 07.07.09 17:38:

Автор оригинала: Активист
Nexus341
не правильно это.
Брось эту идею или юзай куки.
Куки я и так юзаю. Но если зайти с другого браузера под той же учетной записью , то куки выставятся ДРУГИЕ! С новым SID.

-~{}~ 07.07.09 17:46:

Автор оригинала: SiMM
> Он решает зайти с другого ноута/телефона, проходит авторизацию....а там вместо 7 -ой страницы опять красуется вторая.
Пардон, а какое это имеет отношение к смене идентификатора сессии?
Насколько я понимаю, чтобы попасть в ту же сессию где был нужно воспользоваться тем же SID =)
отсюда я делаю вывод: если я хочу чтоб пользователь попадал на ту же страницу где и был не зависимо от того с какого компьютера он заходил 2 мин назад, мне нужно дать ему тот же идентификатор что и был у него.
 

zerkms

TDD infected
Команда форума
Куки я и так юзаю. Но если зайти с другого браузера под той же учетной записью , то куки выставятся ДРУГИЕ! С новым SID.
так может тогда сохранять критичные для твоего приложения данные не в ненадёжных сессиях, а в надёжной БД?
например - последний "шаг" пользователя. и после авторизации на него возвращать. м?
 

Nexus341

Новичок
Автор оригинала: prolis
показ ошибок включи - там всё написано
И что же там написанно?

Вот что мне написал php:
Notice: A session had already been started - ignoring session_start() in /var/www/game/conf1.php on line 2

После этого я закомментировал строку
PHP:
session_start();
в указанном файле "conf1.php" , ошибка пропала но результата нет =((
 

Фанат

oncle terrible
Команда форума
zerkms, что за бред про шаги пользователя? С каких пор для шагания используется база данных, а не адресная строка браузера?

Перед тобой очередной сумасшедший изобретатель, и i'm about to close this topic.
 

Nexus341

Новичок
Автор оригинала: zerkms
так может тогда сохранять критичные для твоего приложения данные не в ненадёжных сессиях, а в надёжной БД?
например - последний "шаг" пользователя. и после авторизации на него возвращать. м?
А вот это уже дельный совет. Большое спасибо Вам !!!!!
Думаю что я получил ответ на свой вопрос.
 

zerkms

TDD infected
Команда форума
*****
и этим жестом доброй воли мы даём возможность человеку менять текущий шаг самостоятельно. несмотря на то, что, возможно, переход именно по очереди критичен для приложения.

-~{}~ 08.07.09 01:05:

ps: ***** в этот раз с тобой не согласен.
 

prolis

Новичок
Nexus341 на будущее:
Notice: A session had already been started - ignoring session_start() in /var/www/game/conf1.php on line 2
смотрим:
http://ru.php.net/manual/en/function.session-id.php
замечаем:
If id is specified, it will replace the current session id. session_id() needs to be called before session_start() for that purpose.
 
Сверху