Saturday, October 14, 2006

Session::State::URI redefine

当我们在 Catalyst 里同时用 Session::State::URI 和 Session::State::Cookie 来保持最大的 session 使用可能性的时候,有件事情可能并不是太完美。因为 Session::State::URI 会重新改写输出的结果,把 html 里的 link, a, img, script 等里的链接后面加上一个 sessionid. 但是对于 img, css 和 script 来说,一般情况下都是没必要的(浏览器会缓存 css/js/img, 但是如果后面加了 sid, 它会重新获取一次,增加了服务器的负担)。所以这时候我们可以 redefine Session::State::URI 里的一个 sub 来去掉 img/css/script 的 url 链接改写。
package Catalyst::Plugin::Session::State::URI;

no warnings 'redefine';

sub _session_rewriting_html_tag_map {
return {
a => "href",
form => "action",
# link => "href",
# img => "src",
# script => "src",
};
}
将这段代码随便放到某个 Controller/Model/Plugin 的 pm 里都可以。因为在 Catalyst 里所有的模块都是一次性载入的。

have fun.

Labels:

Sunday, October 08, 2006

Mail::Mailer::smtp_auth

http://search.cpan.org/~fayland/Mail-Mailer-smtp_auth-0.01/lib/Mail/Mailer/smtp_auth.pm

since we use Mail::Mailer and AUTH PLAIN smtp, so I create this module and upload it to CPAN. have fun.
Saturday, October 07, 2006

use Net::SMTP_auth to auth the smtp server

应该说 Net::SMTP 的 auth 并不是很好,它是根据 SMTP 服务器返回的 AUTH 支持参数来进行下一步的 auth 行动。但是有时候 SMTP 会返回很多个 auth 类型如 LOGIN CRAM-MD5 PLAIN,但是你可能需要用 PLAIN 来进行验证。这时候 Net::SMTP_auth 会派上用场。
Net::SMTP_auth @ISA = qw(Net::SMTP); 唯一不同的是它比 Net::SMTP 的 auth 上多了一个参数。
Net::SMTP 的可能是这样 $smtp->auth($username, $password);
但是 Net::SMTP_auth 多了一个参数指定 auth 类型。$smtp->auth('PLAIN', $username, $password);
如果非得要用 Net::SMTP 来进行 AUTH PLAIN 的话也是可以的:
use MIME::Base64;
# after $stmp = Net::SMTP->new
$smtp->command('AUTH PLAIN')->response();
my $userpass = encode_base64("\000$username\000$password");$userpass =~ s/\n//g;
$smtp->command($userpass)->response();

好象是这样子的。Have fun!