Параметр GET?question=ask :) [SOLVED]

Написал я таки свою первую велосипедную авторизацию =) Теперь у меня в админке к каждой ссылке добавляется ID сессии:

if ( (param('conf') eq "default") and &auth::check_session() )
{
    my ($login, $session) = &auth::restore_session();
    $table->param(ADMIN_LINKS => 1,
          ADMIN_DEFAULT => 1,
          ADMIN_DEFAULT_TOPIC_TITLE => "Страничка по умолчанию:",
          SESSION => $session,
          );
}

А в шаблонах:

<tr><td>
<a href="admin.cgi?conf=default&sid=<TMPL_VAR NAME=SESSION>">default</a>
</td></tr>

Так и придется с каждой ссылкой таскать за собой SID ? Или есть другие решения, я что-то слышал про hidden поле, но толкового примера не нашел.. В общем поделитесь опытом, пожалуйста.

Да, если ты

Да, если ты используешь ссылки - нужно будет таскать. Hidden поля есть только в формах.
Я бы тебе посоветовал забросить взятое тобой направление и посмотреть на CGI::Session(как я уже и говорил). Вопрос с тасканием решается на стороне сервера.

Сессии я как

Сессии я как раз генерю через CGI::Session, а дальше большой велосипед, но ничего не проходит зря.

Quote:

Вопрос с тасканием решается на стороне сервера.

Можно поподробнее..

------------------

#!/usr/bin/perl
print("goto rulez!!!!!!1");

Можно еще

Можно еще выискивать все ссылки в темплейте и конкатинировать их с &sid=...

Как это сделать

Как это сделать ?
я использую HTML::Template
------------------

#!/usr/bin/perl
print("goto rulez!!!!!!1");

hidden это для

hidden это для форм, afaik.
Не имеет ли смысл релаизовать подообную вещь на печеньках?

Давно было дело

Уже буквально не скажу, давно было дело когда я что-то подобное ваял, но можно использовать кукисы, в которые можно запихать все что угодно посредством Serialize (под Апач есть стандартные модули, да и CGI.pm поможет), можно использовать сессии в урле, можно и то, и другое. Есть готовые модули. Apache::Session, по-моему, для первого апача...

И я вставлю свой пятак :)

ID сессии в url это не просто плохо а отвратительно, но его (ID) можно убрать только если использовать куки или запрос делать через method post.
method post означает что нужно не просто ссылку делать а форму. Как вариант, можно сделать чтобы при нажатии на ссылку форма вызывалась через javascript, например так:

$a = "<form name=\"frma\" action=\"a.cgi\" method=\"post\">".
"<input type=\"hidden\" name=\"sesid\" value=\"$sid\">".
"</form>".
"<form name=\"frmb\" action=\"b.cgi\" method=\"post\">".
"<input type=\"hidden\" name=\"sesid\" value=\"$sid\">".
"</form>".
"".
"<form name=\"с\">".
"<input type=\"button\" value=\"linka\" onclick=\"frma.submit(); return true;\">".
"<input type=\"button\" value=\"linkb\" onclick=\"frmb.submit(); return true;\">".
"</form>";

Можно навесить обработчики и на линки, но мне сейчас немножко лень искать. Если интересно - спрашивай.

Serialize

Serialize использовать в качестве номера сессии несекюрно, ибо если постараться, можно его подобрать.
Правильней всего генерить в качестве ID сессии случайное число, или еще лучше что-то типа md5 хеша от этого случайного числа :) и только его наружу показывать (а в программе просто использовать таблицу соответствия сессии и этого случайного числа).

simne, как быть.

simne, как быть. если не на каждой страничке есть формы ? Или я неправильно понял..

PS: Зачем столько бекслешей, если есть qq();
------------------

#!/usr/bin/perl
print("goto rulez!!!!!!1");

Формы в данном случае "искусственные"

Формы в данном случае "искусственные", они не видны и существуют как объекты javascript, только ради отправки переменных через method post.

re ps: это я подбирал способ, как в комменте написать < > и сначала думал что оно так ракообразно воспринимает кавычки, а оказалось < и > надо отправлять как (убрать пробелы и кавычки) "& l t ;" и соответственно "& g t ;", когда разобрался стало облом слеши убирать.

serialize

нет. Номер сессии генерится через стандартные средства типа Digest::MD5 (md5_hex). Serialize используется для помещения информации в кукис (в поле value)

Шоколадные

Шоколадные вафли! Если проще - печеньки :) cookies по ихнему.

Процент браузеров с отключенными cookies невелик, и как говорилось где-то не подлежит учтению: это либо поисковые боты, либо админы :)
Для того, чтобы идентифицировать пользователя на сервере можно пойти по пути добавления &id=... в каждую ссылку на странице, либо один раз записать ему в cookies некоторые данные, например: sid=asEdfnmBsv72, и каждый раз при загрузке проверять наличие ключа sid в cookies.
Это в общем.
Исходя из топика про 'CGI::Cookie expires time', с куками как бы все понятно (наверное).

Собственно, это достаточно простой путь. Выгребать все ссылки на страничке...
А если ссылка генерируется javascript?
А если переход произошел через форму?
А если посетитель просто набрал в адресной строке памятный адрес :)

rimas наверняка дело говорит, но я редко копаюсь в модулях, чаще на своем велосипеде езжу, поэтому не смогу прокомментировать

Уточню.

__bliss написал
нет. Номер сессии генерится через стандартные средства типа Digest::MD5 (md5_hex). Serialize используется для помещения информации в кукис (в поле value)

Я правильно понимаю, что потом чтобы выяснить значение, производится процедура десериализации?