我已发布关于我的问题on the Mojolicious forum,但仍在寻找解决方案。
出于各种原因,我试图获取一些我在IIS上运行的Mojolicious应用程序。我有一个7.5(2k8r2)和8.5(2k12r2)服务器来测试。
IIS设置非常基础。我在默认网站下创建了一个新应用程序,将其指向代码,添加了Perl处理程序映射,并添加了一个默认文档。该网站的路径为http://server.example.com/sessiontest/
在获得站点设置并运行后,除了会话不起作用外,一切都按预期工作。我写了一个test app进行测试。在脚本开始时我要设置会话:
# 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文件中设置测试域名,并在test.example.com
处为服务器IP设置客户端。我补充说:
app->sessions->cookie_domain('.example.com');
app->sessions->cookie_path('/sessiontest');
我假设cookie_path
应该是' /'我也试过没有运气。
任何帮助将不胜感激!
这是一个运行IIS 8.5的新安装的W2k12R2盒子。我安装了ActivePerl 5.24。配置是我能得到的基本配置。这是我用来配置IIS的步骤。
从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
与从Morbo运行的结果
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