如何将会话添加到我的Perl Web应用程序?

时间:2008-12-04 01:15:13

标签: perl web-applications session

我想在我的Perl网络应用中维护状态。我怎样才能有效地做到这一点?我查看了CGI :: Session,但它说它不适用于UTF-8页面,这是一项要求。我还希望能够将一些基本信息传递给在Glassfish应用服务器上运行的另一个Java应用程序,因此人们不会被迫登录这两个应用程序。如何管理所有这些?

5 个答案:

答案 0 :(得分:5)

会话的基础是您需要一个位置来保存会话数据(商店)以及存储和检索会话数据的方法。虽然有些框架称之为The State,但它实际上归结为具有会话密钥(或会话ID)并通过cookie或URL参数将其传递回您的应用程序。

您的商店可以是任何可以为您保存数据的商店。一些示例是:平面文件,dbm文件,DBMS或某种类型的内存缓存。

CGI :: session和Apache :: Session使用的最常见的实现是在商店内的每条记录中有三个字段:session_id,session_data,expires_time。

CPAN上的会话模块负责在请求开始时加载会话,并在最后将其存储回来。

答案 1 :(得分:2)

CGI :: Session文档中引用的错误标记为“已解决”。那个是关于数据库中的utf-8。

您似乎仍然不应该使用'use encoding utf-8'。但是你为什么要这样做呢? “perldoc编码”说“允许你用非ascii或非utf8编写你的脚本”。 WTF?

使用CGI :: Session时,将结果HTML utf8编码似乎不是问题。

答案 2 :(得分:0)

找到一个为您处理会话的Perl Web框架。

例如Catalyst。它将完全抽象出用户会话,因此您甚至不必考虑它。见a tutorial on how to use sessions with catalyst.

如果您正在使用Perl编写网站,那么您应该真正使用此框架。

答案 3 :(得分:0)

嗯,如果不是太晚了。 CGI :: Session适用于任何数据。它取决于您用于会话的序列化格式以及如何将它们存储在数据库中。 我还建议与CGI :: Simple结合使用,我添加了UTF-8表单数据处理。

您是否启用了数据库UTF-8的连接?

对于MySQL你可以使用:     SET NAMES UTF8; 作为连接后的第一句话;

您是否将会话存储在具有不同编码的文本字段中?

只要稍加注意这些事情你就可以了。

您可以查看一些使用示例here

答案 4 :(得分:0)

您最好的选择是生成某种会话密钥并将其存储在浏览器的cookie中。然后,使用该密钥将信息存储在数据库或两者都可以访问的memcached中。