【问题标题】:multiple instances of Singleton CGI Object in perlperl 中 Singleton CGI 对象的多个实例
【发布时间】:2013-02-26 11:42:24
【问题描述】:

我有一个 cgi 页面 index.cgi 和一个登录表单模板

index.cgi

use Singleton::CGI;
use Singleton::Session;

$q = new Singleton::CGI();
$session = new Singleton::Session();
$template = HTML::Template->new(filename => 'login.tmpl');

print $q->header;
print $q->start_html("hello perl");
print $q;   # printing hash of CGI Object.
print $session;
print $template->output;
print $q->end_html;


if($q->param('submit')){

print $q->header;
print $q->start_html("hello user");
print $q;   # printing hash of CGI Object.
print $session;
print $q->param('text');
print $q->end_html;

}

login.tmpl:

<form action="/" method="post">
  <input type="text" name="text"/>
  <input type="submit" name="submit" value="submit"/>
  </form>

这是我得到 index.cgi 时的输出

CGI=HASH(0xbe0510)
SingletonSession=HASH(0x1e67ee60)

连同表格

接下来当我提交表单时 CGI=HASH(0xe2ac500) 与表单输入值相匹配。 SingletonSession=HASH(0x115dc7a0)

根据我的要求,我应该只获得一个会话对象。

我应该如何在整个应用程序中只维护一个查询和会话对象?

【问题讨论】:

    标签: perl mod-perl


    【解决方案1】:

    您的网络服务器会针对它收到的每个请求执行您的脚本,因此您要求在两个甚至不同时运行的进程之间共享一个变量。不可能的。这就是使用会话来提供信息持久性的原因。

    【讨论】:

    • 是的,我使用会话对象来持久化数据.. 使用单例会话对象。但是让多个实例将其视为一个新进程。
    • 您的评论很难理解,但我认为您只是重复了您已经说过的话。如果是这样,我的答案还是一样的。跨进程共享变量是不可能的。可以共享数据,但您没有说出或显示任何数据。
    • debian-administration.org 当我看到它的源代码时,不同的表单有动作有 url '/' 这是起始页。 bui 它不会为每次创建新的 cgi 和 session 对象。这里是源代码的链接code.ohloh.net/…
    • 如果您的问题不完整,请更新问题。但在您这样做之前,请记住,这些链接都没有说明问题。
    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多