Сессии и htaccess.

q2zx

Новичок
Crazy
Все. Запутал меня окончательно.

+++GET 162+++
GET /dddddddd?PHPSESSID=44b0f5dd1c71dc0e708d25b536464ccd HTTP/1.1
User-Agent: Opera/8.50 (Windows NT 5.1; U; ru)
Host: proba
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru, en
Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Referer: http://proba/test.php
Cache-Control: no-cache
TE: deflate, gzip, chunked, identity, trailers
Connection: keep-alive
Browser reload detected...

+++RESP 162+++
HTTP/1.1 404 Not Found
Date: Mon, 14 Nov 2005 20:10:01 GMT
Server: Apache/1.3.33 (Win32) PHP/4.4.0
X-Powered-By: PHP/4.4.0
Set-Cookie: PHPSESSID=2a604e77662d7c23ea5740daf8df53ec; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Transfer-Encoding: chunked
Content-Type: text/html
+++CLOSE 162+++
 

Crazy

Developer
Автор оригинала: q2zx
Crazy
Все. Запутал меня окончательно.
Ты сам себя путаешь. Есть два способа передавать ID сессии: через параметр запроса или через куку. Будет это GET или POST -- абсолютно монопенисуально.

По твоему примеру:

1. Ты отправил запрос на несуществующий URL.
2. В конфиге ты сказал, что такие запросы нужно выкидывать и вместо этого идти на index.php
3. В index.php ты запросил создание сессии.
4. Сессия создалась.

Все как ты сам попросил.
 

q2zx

Новичок
В конфиге ты сказал, что такие запросы нужно выкидывать
Вот я и говорю - ID вылетело в воздух, а предполагал что должно передаться в index.php.

Фанат
а GET-то у тебя есть в этом скрипте?
Передача URL+ PHPSESSID. Или я не понял суть вопроса?
 

Фанат

oncle terrible
Команда форума
чего тут не понять?
МАССИВ $_GET у тебя есть в скрипте?
 

q2zx

Новичок
МАССИВ $_GET у тебя есть в скрипте?
Опа! Для несуществующих страниц $_GET нету. Зато нашел $_SERVER["REDIRECT_QUERY_STRING"] (бывает-же такое?).


Что ты сделал для того, чтобы он передался в index.php?
Прийдется парсить $_SERVER["REDIRECT_QUERY_STRING"] (или $_SERVER["REQUEST_URI"]), извлекать оттуда PHPSESSID, устанавливать session id('PHPSESSID') и только тогда стартовать сессию?

-~{}~ 18.11.05 23:10:

Получается следующее:

PHP:
$sn=session_name();
if (!isset ($_COOKIE[$sn]))
	{
	parse_str($_SERVER["REQUEST_URI"]);
	if (isset ($$sn)) session_id($$sn);
	}
session_start();
Если честно то я думал что сессии и должны стартовать подобным образом.


Итог:
Благодаря ващей помощи и наводящим вопросам удалось выяснить следующее:
1) Опера всегда выдает запрос /favicon.ico HTTP/1.1 при котором в любом случае куки не отдаются;
2) Узнал о существовании замечательной программы Proxomitron;
3) Узнал что для старта сессии ID берется исключительно из массива $_GET (при выкл. куках);
4) Приобрел неоценимый опыт.

Благодарю всех за посильную помощь, за терпение,
до связи...
 

SiMM

Новичок
В FAQ всё это есть. SID берётся из $_GET или $_POST, когда кук нет, или $_COOKIE, когда кука есть.
 

q2zx

Новичок
SID берётся из $_GET или $_POST, когда кук нет, или $_COOKIE, когда кука есть.
Ага, а если ни $_GET ни $_POST ни $_COOKIE нету - тогда не берется ниоткуда. Хотя в URL SID присутствует. Ладно, с этим вопросом все, лучше покритикуйте мой код :).
 

Фанат

oncle terrible
Команда форума
SiMM
ну, лично я не знаю точно, откуда берёт муханизм.
может быть, и из реквеста...
Я просто имел в виду, что в тех местах, откуда он обычно берёт, при редиректе данных не оказывается. но это не обязательно будет $_GET

q2zx
А вот что в факе есть - это рекомендация не стартовать сессию каждому встречному-поперечному.
Если бы ты ей последовал, то на грабли с favicon.ico не наткнулся бы.

-~{}~ 18.11.05 23:42:

Хотя в URL SID присутствует.
URL
в твоём
скрипте
НЕТ!
когда же это до тебя дойдёт-то?
 

Фанат

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

и вообще, ЧПУ через 404 - это позавчерашний день.

-~{}~ 19.11.05 00:25:

лучше покритикуйте мой код
ок
parse_str лучше делать в массив.
и дальше уже с ним работать
$sn - это что такое?
 

SiMM

Новичок
> parse_str лучше делать в массив.
Кстати, что-то я этой конструкции не понял.
PHP:
parse_str("/dddddddd?PHPSESSID=44b0f5dd1c71dc0e708d25b536464ccd",$data);
print_r($data);
Код:
Array
(
    [/dddddddd?PHPSESSID] => 44b0f5dd1c71dc0e708d25b536464ccd
)
Что-то я не уверен, что оно ему (q2zx) надо в таком виде.

> parse_str лучше делать в массив.
q2zx, иначе это дыра.
PHP:
parse_str("_SERVER[REMOTE_ADDR]=figvam");
print_r($_SERVER['REMOTE_ADDR']);
 

q2zx

Новичок
$sn - это что такое?
$sn - имя сессии (phpsessid по умолчанию).

Что-то я не уверен, что оно ему (q2zx) надо в таком виде.
Да ты прав, уже переделал:
PHP:
$sn=session_name();
if (!isset ($_COOKIE[$sn]))
	{
	$url=parse_url($_SERVER["REQUEST_URI"]);
	parse_str($url['query'],$arr);
	if (isset ($arr["$sn"])) session_id($arr["$sn"]);
	}
session_start();
 
Сверху