Теряю идентификатор сессии. Почему

Dima_A

Новичок
Теряю идентификатор сессии. Почему

Такая ситуация:

Юзер вводит логин и пас в форме. В ней:
PHP:
<?
session_start(); //Значение PHPSESSID=fektti965rl8690vkljl1nl5l7
?>
...........................
<form method="post" id=log name=log action="/ru/auth/">
в файле auth.php происходит сверка с бд. Если все ок тогда
PHP:
1.
  session_register("name");
  $_SESSION['name']=$this->login;
2.
header("Location: [url]http://www.site.com/ru/?[/url]".session_name()."=".session_id());
После хедера я имею урл:
http://www.site.com/ru/?PHPSESSID=fektti965rl8690vkljl1nl5l7


А н авсех ссылках в странице полумаю такие
http://www.site.com/ru/?PHPSESSID=4tfv6jmc7r39at63sc7mvnfi16


Почему теряется идентификатор сессии???
 

Фанат

oncle terrible
Команда форума
во-первых, убери session_register. откуда ты вообще эту функцию взял?!
во-вторых, опять твой мод реврайт гадит небось
 

Dima_A

Новичок
Убрал session_register не помогло

PHP:
RewriteRule ^([a-z]{2})/$ index.php?lng=$1

RewriteRule ^([a-z]{2})/(reg_form)/$ auth.php?lng=$1&do=$2
RewriteRule ^([a-z]{2})/auth/$ auth.php?lng=$1
RewriteRule ^([a-z]{2})/(auth_form)/$ auth.php?lng=$1&do=$2
RewriteRule ^([a-z]{2})/(exit)/$ auth.php?lng=$1&do=$2

RewriteRule ^([a-z]{2})/registration/$ registration.php?lng=$1
Вы думаете дело в реврайте?
Когда я убирал приставку ru/, то все работало(идентификатор не терялся.) Может дело в этом?
 

Фанат

oncle terrible
Команда форума
РАЗУМЕЕТСЯ, НЕ ПОМОГЛО! эта функция просто лишняя.

Где у тебя в этих правилах написано, что в адресе может быть идентификатор сессии?
И чего ты вообще ждешь от всех этих многочисленных правил. у тебя их вообще сколько будет всего, если на один скрипт - аж 4 правила? несколько тысяч?

доставай руками идентификатор из реквест ури, и подставляй его в session_id()
 

Dima_A

Новичок
Так идентификатор может подставляться в ссылки а может и нет ( в зависимости от того принимает куку браузер или нет)

Тогда получается должно быть 2 правила: для случая когда есть сид и когда нет?

По поводу правил:
У меня в скрипт приходит переменная do В зависимости от ее значения грузится ссответствующий темплейт

-~{}~ 12.01.08 22:40:

Если поменять
header("Location: <a href="http://www.site.com/ru/?" target="_blank">http://www.site.com/ru/?</a>".session_name()."=".session_id());
на

header("Location: <a href="http://www.site.com?" target="_blank">http://www.site.com/ru/?</a>".session_name()."=".session_id());

то все нормально. Идентификатор не теряется...
 

Фанат

oncle terrible
Команда форума
a href - это ты сам написал, или форум подставил?

по поводу индентификатора ты читаешь вообще, что я пишу?
доставай руками идентификатор из реквест ури, и подставляй его в session_id()
 

Dima_A

Новичок
a href - это ты сам написал, или форум подставил?
форум подставил

доставай руками идентификатор из реквест ури, и подставляй его в session_id()
ТАК должно быть:
PHP:
header("Location: http://www.site.com/ru/?".session_name()."=".$_GET['PHPSESSID']);
Это получается ее в каждую ссылку подставлять??
 

Фанат

oncle terrible
Команда форума
чтобы пхп подхватил идентификатор автоматом, он должен передаваться в скрипт в адресной строке.
ПОКАЖИ МНЕ АДРЕСНУЮ СТРОКУ в твоих правилах рерайта, которая передает идентификатор?
 

Dima_A

Новичок
блин запутался совсем.
Ты предлагаешь прописать правила для сида и вставлять идентификатор из реквест ури в session_id()
Подскажи как достать идентификатор из реквест ури

Так тогда получается что нужно писать 2 правила: первое будет когда сид подставляется(браузер не принимает у клиента куку) и второе когда не подставляется(когда браузер разрешает принимать куки)
 

Фанат

oncle terrible
Команда форума
гетом у тебя передается то, что прописано правилах рерайта
ты даже этого не понимаешь?
что если скрипт вызывается, как auth.php?lng=ru, то можно до пенсии ждать там любые други5 переменные, но их там не будет?
 

Dima_A

Новичок
Совсем запутался.
Обьясни мне пожалуйста почему когда уберу /ru из такого хедера, тоесть останется http://www.site.com/?ses.......
header("Location: http://www.site.com/ru/?".session_name()."=".session_id();
то все нормально работает и идентификатор не теряется
 

Фанат

oncle terrible
Команда форума
а такой адрес попадает под правила реврайта?

-~{}~ 13.01.08 00:16:

В общем, разибрайся.
все, что тебе надо понять, это то, что пхп берет иднетификатор не из воздуха, а из гета.
гед можно посмотреть в скрипте, командой пхпинфо()
вот и займись экспериментами.

почему ты этого не сделал раньше - я не пониаю
 

Dima_A

Новичок
Вот правило:
RewriteRule ^([a-z]{2})/(exit)/$ auth.php?lng=$1&do=$2
Вост ссылка:
http://www.site.com/ru/exit/?PHPSESSID=nmel2m4111cjs7asvijm2bg4u0

И все красиво работает. Вот еще ссылка:
header("Location: http://www.site.com/lng=".$lng."&".session_name()."=".session_id());
вот правило:
RewriteRule ^([a-z]{2})/$ index.php?lng=$1

Аналогично и вторую переменную как бы не вилно

Что-то мне кажется что запудрил ты мне мозги, все ходил вокруг да около. Никакой конкретики. Реально сИД к модреврайту не имеет никакого отношения.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Реально сИД к модреврайту не имеет никакого отношения
Вы ошибаетесь. с PHPSESSID очень реально могут возникнуть проблемы с Вашим правилом. Если СИД передается гетом.

Никакой конкретики
Конкретика есть в мануале.
 

Dima_A

Новичок
Ок, пишем правило:
RewriteRule ^([a-z]{2})/([a-z,A-Z,0-9]{25,30})/$ index.php?lng=$1&PHPSESSID=$2

Тогда ко все ссылкам вида:
site.com/ru/bt70okhg6cto93708s43shmi77/ будет добавляться СИД и будет:
site.com/ru/bt70okhg6cto93708s43shmi77/?PHPSESSID=bt70okhg6cto93708s43shmi77
 

Фанат

oncle terrible
Команда форума
че-то ты загнул. два идентификатора - это не многовато?

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