与IIS上的Mojolicious会话cookie

时间:2017-08-03 16:21:18

标签: perl session iis cookies mojolicious-lite

初始帖子

我已发布关于我的问题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配置

这是一个运行IIS 8.5的新安装的W2k12R2盒子。我安装了ActivePerl 5.24。配置是我能得到的基本配置。这是我用来配置IIS的步骤。

  • 安装IIS w / CGI支持
  • 将测试应用复制到C:\ Code \ sessiontest \
  • 来自默认网站 - >添加申请
  • 别名:sessiontest,物理路径:C:\ Code \ sessiontest \
  • 选择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

与从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

0 个答案:

没有答案