Сессионные куки с Mojolicious на IIS
Начальный пост
Я написал о своей проблеме на форуме Mojolicious, но все еще ищу решение.
По разным причинам я пытаюсь заставить некоторые приложения Mojolicious, которые я написал, работать на IIS. У меня есть серверы 7.5 (2k8r2) и 8.5 (2k12r2) для тестирования.
Настройка IIS очень проста. Я создал новое приложение на веб-сайте по умолчанию, указал его на код, добавил отображение обработчика Perl и добавил документ по умолчанию. Путь к сайту http://server.example.com/sessiontest/
После настройки и запуска сайта все работает как положено, за исключением того, что сеансы не работают. Я написал тестовое приложение для тестирования. В начале скрипта я настраиваю сессию:
# Setup sessions
app->secrets(['SessionTest']);
app->sessions->cookie_name('sessiontest');
Установка переменной сеанса:
get '/set' => sub {
my $c = shift;
$c->session(testvar => 1);
$c->redirect_to('/');
};
И тестирование, чтобы увидеть, существует ли оно с помощником:
helper testvar => sub {
my $c = shift;
if($c->session('testvar')) {
return 1;
}
return undef;
};
Когда я запускаю код с Morbo на любом сервере, он работает нормально и сеансы работают. Но под IIS я ничего не получаю.
Одно из предложений, которое я получил, было посмотреть на домен cookie и путь к cookie. В качестве теста я попытался установить тестовое имя домена в файле hosts сервера и клиента для IP-адресов серверов по адресу test.example.com
, Я их добавил:
app->sessions->cookie_domain('.example.com');
app->sessions->cookie_path('/sessiontest');
Я предполагаю cookie_path
должно быть '/', что я также попытался без удачи.
Любая помощь будет оценена!
IIS Config
Это недавно установленная коробка W2k12R2 под управлением IIS 8.5. У меня установлен ActivePerl 5.24. Конфиг настолько прост, насколько я могу получить. Вот шаги, которые я предпринял, чтобы настроить IIS.
- Установить IIS с поддержкой CGI
- Скопируйте тестовое приложение в C:\Code\sessiontest\
- С веб-сайта по умолчанию -> Добавить приложение
- Псевдоним: сессионный тест, Физический путь: C:\Code\sessiontest\
- Выберите сессионное приложение
- Добавьте сопоставление обработчика для *.pl в C:\Perl64\bin\perl.exe "%s" %s
- Добавить документ по умолчанию для app.pl
Выход из скручивания
Результат от curl к серверу IIS.
curl -I http://server.example.com/sessiontest/app.pl/set
HTTP/1.1 200 OK
Content-Length: 160
Content-Type: text/html;charset=UTF-8
Server: Microsoft-IIS/7.5
[Thu Aug 3 19: 49:38 2017] [debug] HEAD "/"
[Thu Aug 3 19: 49:38 2017] [debug] Routing to a callback
[Thu Aug 3 19: 49:38 2017] [debug] Rendering template "index.html.ep" from DATA section
[Thu Aug 3 19: 49:38 2017] [debug] Rendering template "layouts/default.html.ep" from DATA section
[Thu Aug 3 19: 49:38 2017] [debug] 200 OK (0.002271s, 440.335/s)
Date: Thu, 03 Aug 2017 23:49:38 GMT
По сравнению с результатом бега от Морбо
curl -I http://server.example.com:3000/set
HTTP/1.1 302 Found
Content-Length: 0
Date: Thu, 03 Aug 2017 23:51:29 GMT
Location: /
Server: Mojolicious (Perl)
Set-Cookie: sessiontest=eyJleHBpcmVzIjoxNTAxODA3ODg5LCJ0ZXN0dmFyIjoxfQ----96063fca63a3457e89becc55d7df39898466bb99; expires=Fri, 04 Aug 2017 00:51:29 GMT; path=/; HttpOnly
Я установил режим производства, и теперь я подхожу к IIS.
curl -I http://server.example.com/sessiontest/app.pl/set
HTTP/1.1 200 OK
Content-Length: 160
Content-Type: text/html;charset=UTF-8
Server: Microsoft-IIS/7.5
Date: Fri, 04 Aug 2017 00:04:30 GMT