Как добавить сеансы в мое веб-приложение Perl? - PullRequest
4 голосов
/ 04 декабря 2008

Я хочу сохранить состояние в моем веб-приложении Perl. Как я могу сделать это эффективно? Я посмотрел на CGI :: Session, но там написано, что он плохо работает со страницами UTF-8, что является обязательным требованием. Я также хотел бы иметь возможность передавать некоторую основную информацию другому приложению Java, работающему на сервере приложений Glassfish, чтобы, например, люди не были вынуждены входить в оба приложения. Как все это можно сделать?

Ответы [ 5 ]

5 голосов
/ 04 декабря 2008

Основы сеансов: вам нужно место для хранения данных сеанса (хранилище) и способ хранения и извлечения данных сеанса. В то время как некоторые фреймворки называют это State, оно действительно сводится к наличию ключа сеанса (или идентификатора сеанса) и его передаче обратно в ваше приложение с помощью файла cookie или параметра URL.

Ваш магазин может быть любым, что может хранить данные для вас. Вот некоторые примеры: простой файл, файл dbm, СУБД или кэш-память определенного типа.

Наиболее распространенная реализация, которая используется CGI :: session и Apache :: Session, состоит в том, чтобы иметь три поля в каждой записи внутри хранилища: session_id, session_data, expires_time.

Модули сеансов на CPAN заботятся о загрузке сеанса в начале запроса и сохранении его в конце.

2 голосов
/ 04 декабря 2008

Ошибка, указанная в документации для CGI :: Session, помечена как "исправленная". Тот был о UTF-8 в базе данных.

Кажется, вам все равно не следует использовать 'use encoding utf-8'. Но зачем ты это делаешь? «perldoc encoding» говорит «позволяет писать свой скрипт не в ascii или не в utf8». WTF?

При использовании CGI :: Session не возникает проблем с кодировкой HTML-кода в utf8.

0 голосов
/ 28 апреля 2009

Лучше всего было бы создать какой-то ключ сеанса и сохранить его в файле cookie в браузере. Затем используйте этот ключ для хранения информации либо в базе данных, либо в memcached , к которой оба могут получить доступ.

0 голосов
/ 28 апреля 2009

Хм, если еще не поздно. CGI :: Session прекрасно работает с любыми данными. Это зависит от формата сериализации, который вы используете для своей сессии, и от того, как вы храните их в своей базе данных. Я бы также предложил комбинацию с CGI :: Simple, для которой я добавил обработку данных формы UTF-8.

Включено ли ваше подключение к базе данных UTF-8?

для MySQL вы можете использовать: SET NAMES UTF8; в качестве самого первого утверждения после подключения;

Храните ли вы свой сеанс в текстовом поле с другой кодировкой?

Просто позаботься о таких вещах, и все будет хорошо.

Вы можете посмотреть некоторые примеры использования здесь .

0 голосов
/ 05 декабря 2008

Найдите веб-фреймворк Perl, который обрабатывает сессии для вас.

Например Катализатор . Он будет полностью абстрагироваться от пользовательских сессий, так что вам даже не придется об этом думать. См. учебное пособие по использованию сеансов с катализатором.

Если вы программируете веб-сайт на Perl, вы все равно должны использовать эту платформу.

...