使用 CGI::Application::Plugin::Session 为 Perl Web 应用程序中的每个实例创建新会话

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

警告:与此线程类似,但仍然不同。

在家庭滚动的 ecomm 应用程序中,当将商品添加到购物车时,所有实例通用的 Perl 模块将创建一个参数为 order_id 的会话:

    $self->session_config(
        DEFAULT_EXPIRY => '+4h',
        COOKIE_PARAMS  => {
            -name    => 'ECOMM_SESSID',
            -expires => '+4h',
            -path    => '/',
            -domain  => '.mydomain.com',
        },
        SEND_COOKIE => 1
    );

此实例由

cart.cgi
触发,它调用
Cart.cgi

查看购物车时,会显示变量转储

  • $self->session->param( 'order_id' )
    = 4123`
  • session id = 1111111
    *
  • ECOMM_SESSID
    标题中的 cookie†

当其他商品添加到购物车时,变量转储继续显示相同的值。

如果点击“结帐”,

shipping.cgi
会触发呼叫
Shipping.pm
。在模块的
cgiapp_prerun
部分检查 order_id 参数是否存在。然而,数据转储显示:

  • $self->session->param( 'order_id' )
    = 空`
  • session id = 2222222
    *
  • 标题中
  • ECOMM_SESSID
    cookie 缺失

正在创建新会话,丢失 order_id 参数。

有趣的是,如果我返回购物车,所有原始值都在那里。

所以,我的问题:如何阻止新会话,从而保留旧会话和结帐过程中继续所需的值?

*简化 †在浏览器检查器中

perl session cgi session-cookies session-variables
1个回答
0
投票

解决了我的问题。 PEBKAC 错误。原因是重新创建两个具有相同名称但不同 ID 的会话是因为运输模块使用了不同的域名。因此,新域名的引入迫使新的会话出现。背景故事:我已将其设置为暂存站点,但在将其上线后,忘记调整发货链接。终于在网址里看到了。插头拍

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