我想在我的Perl网络应用中维护状态。我怎样才能有效地做到这一点?我查看了CGI :: Session,但它说它不适用于UTF-8页面,这是一项要求。我还希望能够将一些基本信息传递给在Glassfish应用服务器上运行的另一个Java应用程序,因此人们不会被迫登录这两个应用程序。如何管理所有这些?
答案 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)
您是否启用了数据库UTF-8的连接?
对于MySQL你可以使用: SET NAMES UTF8; 作为连接后的第一句话;
您是否将会话存储在具有不同编码的文本字段中?
只要稍加注意这些事情你就可以了。
您可以查看一些使用示例here。
答案 4 :(得分:0)
您最好的选择是生成某种会话密钥并将其存储在浏览器的cookie中。然后,使用该密钥将信息存储在数据库或两者都可以访问的memcached中。