首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用FCGI获取cookie

如何使用FCGI获取cookie
EN

Stack Overflow用户
提问于 2014-01-27 19:21:20
回答 1查看 957关注 0票数 1

我有以下Perl FastCGI脚本:

代码语言:javascript
复制
#!/usr/bin/perl
use warnings;
use strict;
use FCGI;
use POSIX;
use FindBin qw($Bin);
use FCGI::ProcManager qw(pm_manage pm_pre_dispatch pm_post_dispatch);   

use Data::Dumper;


&demonize();

my $socket = FCGI::OpenSocket(":9000", 5); 

my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket, FCGI::FAIL_ACCEPT_ON_INTR);

pm_manage(n_processes => 2);

chdir $Bin or die "Error::$!\n";

while($request->Accept() >= 0 ) {
     pm_pre_dispatch();

         print "\%ENV => \n ", Dumper($env), "\n\n";

         pm_post_dispatch();
}

.....

我在nginx上部署了我的应用程序,配置如下:

代码语言:javascript
复制
server {
    listen 80;
    server_name eventise.my;

    root /home/tigran/Documents/Development/perl/eventise/www;

    location / {
        index   index.html;
   }    

    location ~* \.(gif|jpg|png|js|css|html)$ {
        expires 30d;
   }

    location /perl/ {
        fastcgi_pass   localhost:9000;  

        fastcgi_param SCRIPT_FILENAME /home/tigran/Documents/Development/perl/eventise/fcgi-bin$fastcgi_script_name;
        fastcgi_param QUERY_STRING    $query_string;
        fastcgi_param REQUEST_METHOD  $request_method;
        fastcgi_param CONTENT_TYPE    $content_type;
        fastcgi_param CONTENT_LENGTH  $content_length;  
        fastcgi_param REQUEST_URI     $request_uri;
        fastcgi_param DOCUMENT_URI    $document_uri;
        fastcgi_param REMOTE_ADDR     $remote_addr;
        fastcgi_param REMOTE_PORT     $remote_port;
        fastcgi_param SERVER_ADDR     $server_addr;
        fastcgi_param SERVER_PORT     $server_port;
        fastcgi_param SERVER_NAME     $server_name; 
        fastcgi_pass_header Cookie;     
    }
}

当我使用Chrome客户端向我的应用程序发送带有cookie的请求时,我看不到%ENV中的cookie。相反,我看到:

代码语言:javascript
复制
%ENV => 
 $VAR1 = {
          'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
          'REQUEST_METHOD' => 'GET',
          'SCRIPT_FILENAME' => '/home/tigran/Documents/Development/perl/eventise/fcgi-bin/perl/',
          'HTTP_USER_AGENT' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36',
          'REMOTE_PORT' => '56832',
          'QUERY_STRING' => '',
          'HTTP_CACHE_CONTROL' => 'max-age=0',
          'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.8',
          'FCGI_ROLE' => 'RESPONDER',
          'CONTENT_TYPE' => '',
          'DOCUMENT_URI' => '/perl/',
          'SERVER_NAME' => 'eventise.my',
          'HTTP_ACCEPT_ENCODING' => 'gzip,deflate,sdch',
          'HTTP_CONNECTION' => 'keep-alive',
          'CONTENT_LENGTH' => '',
          'SERVER_PORT' => '80',
          'REMOTE_ADDR' => '127.0.0.1',
          'REQUEST_URI' => '/perl/',
          'SERVER_ADDR' => '127.0.1.1',
          'HTTP_HOST' => 'eventise.my'
        };

我哪里出错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 10:21:46

它看起来像Chrome客户端不支持cookie

但是不可能设置"Cookie“头部,因为规范不允许它。有关详细信息,请参阅http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method

详细信息: http://blog.getpostman.com/index.php/2013/09/18/legacy-app-update-cookies-and-devtools-for-v0-9-x/

您可以使用较早版本的Postman来发送/编辑cookie,也可以使用Postman代理进行此操作:

解决方法之一是使用Postman代理设置cookie头,并使用从浏览器获得的cookie值。 我认为这是相当笨重的,可以改进。如果您正在测试的API使用cookie,我建议继续安装v0.8.x。由于v0.8.x和v0.9.x可以作为单独的应用程序使用,所以您可以并行使用它们,以最大限度地利用邮递员。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21389730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档