搞文本Session。。。
已经以为成功。。
想到Session可能会自己损坏。所以。。自己做了测试,结果,发现人为改坏Session文本后,程序居然读取失败后 500 err?
明明是在模块中 CheckSession时候用的eval呀。应该不会500err才是。但是err.log还是指向的那句
eval ( "require \"$self->{_API}->{_SESSION_FILE}\";" ) || $self->NewSession();
附上完整代码。 问题就出现在DiGiSession.pm模块中。。。
http://easun.org/upload/early/cgi_1105459562.rar
测试代码说明 :
1。Session目录需要可读/写 (777目录+666文件)。
2。我用的相对路径,如果你的主机不支持相对路径,请把
my $session = DiGiSession->new($c_ss_id,'Session','3m');
改成
my $session = DiGiSession->new($c_ss_id,'你的路径/Session','3m');
声明:DiGiSession.pm模块版权为Firzen<firzen@perlchina.org>所有,我只是改了一点东西而已。呵呵:)
eval { "require \"$self->{_API}->{_SESSION_FILE}\";" } || $self->NewSession();
找到原因。不是eval问题。而是。。。$self->NewSession(); 出了问题。
不知道....
我在公司測試過....
好像只是 eval 的問題...
把 (..) 改成 {..} 就行.......
和哪个没有关系。
原因是 NewSession 这个函数根本就没有。应该是 SessionNew()
严重ft.
改為
eval ( "require \"$self->{_API}->{_SESSION_FILE}\";" ) || 1;# || $self->NewSession();
String found where operator expected at Session/ss_fefb2fc46ee40df34a4faad876326
3f7 line 1, near "fefb2fc46ee40df34a4faad8763263f7",""
Bareword found where operator expected at Session/ss_fefb2fc46ee40df34a4faad8763
263f7 line 1, near "","_ATIME"
(Missing operator before _ATIME?)
String found where operator expected at Session/ss_fefb2fc46ee40df34a4faad876326
3f7 line 1, near "_ATIME" => ""
Number found where operator expected at Session/ss_fefb2fc46ee40df34a4faad876326
3f7 line 1, near "" => "1105714371"
(Missing operator before 1105714371?)
String found where operator expected at Session/ss_fefb2fc46ee40df34a4faad876326
3f7 line 1, at end of line
(Missing semicolon on previous line?)
Set-Cookie: Session_ID=fefb2fc46ee40df34a4faad8763263f7; path=/; expires=Sat, 14
-Jan-2006 14:53:17 GMT
Date: Fri, 14 Jan 2005 14:53:17 GMT
Content-Type: text/html; charset=gb2312
fefb2fc46ee40df34a4faad8763263f7
那個就是我的測試結果.....
的確會出錯....
不過再執行一次就沒問題,應該是在500 時有新session檔產生...
===
改為
eval { "require \"$self->{_API}->{_SESSION_FILE}\";" } || 1;
後的結果
Set-Cookie: Session_ID=fefb2fc46ee40df34a4faad8763263f7; path=/; expires=Sat, 14
-Jan-2006 14:55:05 GMT
Date: Fri, 14 Jan 2005 14:55:05 GMT
Content-Type: text/html; charset=gb2312
fefb2fc46ee40df34a4faad8763263f7
完全沒有問題
恩,就是后面的函数写错了而已。。。我一直都没有发现。
真马虎。。晕
哈
之前有用过PID
不过在很长的一段时间内都没有想出自动作废进程号的处理方式
后来经过一段时间才想到
木头是打算用它取代部分cookies?
http://www.easunstudio.com/cgi-bin/perl/topic.cgi?forum=3&topic=16&show=0 :em05:
看到呢
不过
跟我后来的应用方法不大一样
我所设计的PID是根据时间来判断是否作废的
如果PID执行时间-程序记录的用户登录时间>系统设定存活期,
那么就出错误信息,提示用户重新登陆………………