Написал я таки свою первую велосипедную авторизацию =) Теперь у меня в админке к каждой ссылке добавляется 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, а дальше большой велосипед, но ничего не проходит зря.
Вопрос с тасканием решается на стороне сервера.
Можно поподробнее..
------------------
Можно еще
Можно еще выискивать все ссылки в темплейте и конкатинировать их с &sid=...
Как это сделать
Как это сделать ?
я использую HTML::Template
------------------
http://search.cpan.org/~marks
http://search.cpan.org/~markstos/CGI-Session-4.36/lib/CGI/Session/Tutori...
hidden это для
hidden это для форм, afaik.
Не имеет ли смысл релаизовать подообную вещь на печеньках?
Давно было дело
Уже буквально не скажу, давно было дело когда я что-то подобное ваял, но можно использовать кукисы, в которые можно запихать все что угодно посредством Serialize (под Апач есть стандартные модули, да и CGI.pm поможет), можно использовать сессии в урле, можно и то, и другое. Есть готовые модули. Apache::Session, по-моему, для первого апача...
И я вставлю свой пятак :)
ID сессии в url это не просто плохо а отвратительно, но его (ID) можно убрать только если использовать куки или запрос делать через method post.
method post означает что нужно не просто ссылку делать а форму. Как вариант, можно сделать чтобы при нажатии на ссылку форма вызывалась через javascript, например так:
Можно навесить обработчики и на линки, но мне сейчас немножко лень искать. Если интересно - спрашивай.
Serialize
Serialize использовать в качестве номера сессии несекюрно, ибо если постараться, можно его подобрать.
Правильней всего генерить в качестве ID сессии случайное число, или еще лучше что-то типа md5 хеша от этого случайного числа :) и только его наружу показывать (а в программе просто использовать таблицу соответствия сессии и этого случайного числа).
simne, как быть.
simne, как быть. если не на каждой страничке есть формы ? Или я неправильно понял..
PS: Зачем столько бекслешей, если есть qq();
------------------
Формы в данном случае "искусственные"
Формы в данном случае "искусственные", они не видны и существуют как объекты 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 наверняка дело говорит, но я редко копаюсь в модулях, чаще на своем велосипеде езжу, поэтому не смогу прокомментировать
Уточню.
Я правильно понимаю, что потом чтобы выяснить значение, производится процедура десериализации?