排序网络cookie env

问题描述 投票:-1回答:1

我目前正在搞乱Perl和网络cookie。我正在从HTTP_COOKIE环境变量中收集信息,但是我仍然坚持如何对结果进行排序。

简单的“排序{$ cookie}”对我来说很好,但是当使用拆分功能时我会被卡住。有没有办法对数组进行排序?

收集数据:

sub netcookie {;
my $cookie = $ENV{'HTTP_COOKIE'};
#foxcookie 
};

my $cookie = netcookie();

我有一个动态加载网站,它根据cookie的“级别”值加载一个寺庙文件。

当用户通过身份验证时,cookie会使用图章,精灵和宫殿进行更新,因此cookie看起来像这样:

HTTP_COOKIE 
stamp=stamps/stamp.0.113646176072308; 
sprite=stamps/sprite.0.385163302390964; 
palace=stamps/palace.0.57031374346893;     
level=5.0:Palace; 
magic=palace.pixc

在此之前,cookie看起来像这样可以很容易地映射到$ level和$ magic

HTTP_COOKIE 
level=2.3:FoxCookie; 
magic=foxcookie.pixc;

我正在使用的代码是:

my ($level,$magic,$stamp,$sprite,$palace) = split ';', $cookie; 
#split $cookie in to variables delimited by ;

然而,由于我后来添加的额外cookie值,$ level不再变为$ level,最终变得混乱。

如果排序(等等)不是真的可行,那么下一个最佳方式是什么?

if ($level =~ 'level=5.0:Palace') 
#If the cookie contains level palace
{
print "Welcome to the TeddyPortal of the CrystalForest Palace";
rawr::fountain::magic("$level","$magic");
}

我试过这样的:

my $cube = sort($cookie);
my @cube = sort($cookie);
my &cube = sort($cookie);

所有结果都失败了。但是我似乎也不能使用:

my $cookie = sort(netcookie());

tl; dr:对分裂进行排序

谢谢,Mookie

perl cookies
1个回答
0
投票

您可以使用hash将cookie密钥名称记录为哈希密钥,方法是将数据分成两次:一次在';'上然后再次'='

my @parts = split /;\s*/, $cookie;
my %hash;
for my $part (@parts) {
    my ($key,$val) = split /=/, $part;
    $hash{$key} = $val;
}

这是一个更简洁的版本。您可以这样做,因为哈希可以表示为键值对列表。

my %hash = map {split /=/, $_} split /;\s*/, $cookie;    

访问以下值:print $hash{level}."\n"

© www.soinside.com 2019 - 2024. All rights reserved.