在perl中发送带有文件下载的cookie值

时间:2014-03-20 12:49:21

标签: perl cookies http-headers submit download

我在网页上有一个提交按钮,点击后会执行文件下载。

我试图在点击后禁用提交(以防止在服务器端创建文件时重新提交),然后在下载文件时重新启用提交按钮。

我几乎按照以下教程完成了工作,简而言之:

  • 点击下载获取当前时间戳并将其存储在 隐藏的领域
  • 将包含下载请求的时间戳发送到服务器
  • 服务器执行文件处理
  • 服务器创建一个cookie,其中包含从客户端发送的时间戳值 在原始请求中
  • 服务器将cookie连同要下载的文件一起发送到客户端
  • 如果cookie值与隐藏字段时间戳匹配,则在客户端上 提交已重新启用

Detecting file download in browser

问题是我似乎找不到使用文件下载头将cookie值发送回客户端的方法,如果我在标题中包含set-cookie它会破坏文件下载过程。

这是我当前的标题,有效:

Content-disposition: attachment; filename=$file; Content-type: $type\n\n$content

如果我这样做会打破:

Set-Cookie:$cookie; Content-disposition: attachment; filename=$file; Content-type: $type\n\n$content

我正在服务器上创建一个cookie,其中包含来自客户端的时间戳值:

$cookie = CGI::Cookie->new(-name=>'fileDownloadToken',-value=>"$token_value");

有没有人知道我应该怎么做,用Perl编码?

1 个答案:

答案 0 :(得分:1)

好的,我想我已修好了。为了防止其他任何人遇到这种情况,它似乎是标题的格式,而不是使用单个字符串:

print qq(Content-disposition: attachment; filename=$file; Content-type: $type\n\n$content)

我用过这个:

print $page->header(
            -'cookie' => "$cookie",
            -'Content-disposition' => "attachment; filename=\"$file\"",
            -'Content-type' => $content
);