【问题标题】:Perl - Apache::Session - Error HandlingPerl - Apache::Session - 错误处理
【发布时间】:2013-09-12 08:01:47
【问题描述】:

我在我的 Web 应用程序中使用 Perl CGI 和 Apache::Session。

当使用这样的 tie 设置 Apache::Session 时:

tie %session, 'Apache::Session::MySQL', $id, {
    DataSource => 'dbi:mysql:apache_session', 
    UserName   => 'root',         
    Password   => '',           
    LockDataSource => 'dbi:mysql:apache_session',
    LockUserName   => 'root',
    LockPassword   => ''
};

当 $id 不是数据库中的有效会话时,我如何捕获发生的错误?我需要创建一个新的会话 ID,而不是让应用程序因 500 http 错误而死掉。

当用户有一个过期的 cookie 时会出现这种情况,该 cookie 的会话 ID 已从数据库中删除。

【问题讨论】:

    标签: perl apache session cookies tie


    【解决方案1】:

    如果$id 变量的值为undef,Apache::Session 会创建一个新的会话ID。现在如果定义了$id,但没有在这里指定一个有效的会话,那么就会抛出一个异常。

    您可以这样做的一种方法是将tie 包装在eval 块中。

    eval {
         tie %session, 'Apache::Session::MySQL', $id, {
             DataSource => 'dbi:mysql:apache_session', 
             UserName   => 'root',         
             Password   => '',           
             LockDataSource => 'dbi:mysql:apache_session',
             LockUserName   => 'root',
             LockPassword   => ''
         };
    };
    

    如果抛出异常,您可以检查消息是否表明会话无效。

    if ( $@ ) { ... }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      • 2017-10-14
      • 2011-11-22
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多