免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6208 | 回复: 8

[讨论]关于Perl实现文本Session实现的一点困惑 [复制链接]

论坛徽章:
0
发表于 2004-11-01 11:43 |显示全部楼层
纯粹技术探讨。
近来在研究自定义文本Session,根据我自己对Session的理解和体会,实现办法可以是:

1。用户登陆,密码校对后,以一种算法随机生成一随机数字Session_id,具体实现就是服务器生成一纯文本文件,就以Session_id命名,用户id,密码等敏感信息写入这个文本,本地cookie写入用户id和Session_id。。由于登陆时候可以选择Session/cookie保持实效。这个数字比如[-1(不保存)+30(保存30天)等。。],同时写入Session文本和cookie。。

2。这样,如果选择保持登陆信息(比如+30),则在30天内用户再次访问时候,从cookie中获取Session_id。通过读取服务器上的Session_id文本,来检验用户id和密码。。如果通过。则自动认为登陆。

现在我的问题就是远程服务器上的Session文本文件的处理。大家知道,Session_id是随机产生的,那么相同的用户在不同的地方,不同的登陆时间得到的Session_id都是不同的,那么如果不对这些文本处理。久而久之,肯定有很多废弃了。。。那么应该对这些进行删除处理的。。那么机制呢?

文本的特殊性质,为了节省资源,一般只有在用户重新访问的时候才进行Session文本的时效验证。那么那些可能永远也访问不到的Session文本就验证遥遥无期了。

如果采用一种机制对Session文本进行删除,比如把时效写入Session文本,按照时效自动删除。。。但是时效选择比较长的呢?他可能是有效的Session,也可能是废弃的Session。如果删除,造成该用户下次不能自动登陆。。那就失去保持的含义了。如果不处理。则浪费空间。影响效率。 困惑ing。。。

希望各位高人指点。还有我对Session理解不对的地方也请不吝指教:)

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2004-11-01 16:41 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

1.通常session的有效時間,都不長..cookies才比較長...

2.建議你可以將session有效時間設定成以分鐘為單位..
   cookies才以天為單位,當發現用戶的 cookies裡面的session已經
  超時,但是cookies尚未超時,則就再幫他取得一個session id..

3.寫個簡單的cron,定時去掃瞄這些已經超時的session..例如你發現他的
  session id已經超時,則在那個file裡面做個mark..
  或直接把session名稱改成固定格式的文件名..這樣crontab只要針對這些
  超時的session做處理即可。

4.再檢查session時,可以將有效時間放進去..這樣crontab就會自動刪掉
  那些已經超時的session file

5.可以考慮將所有人的session file放在同一個目錄下,也可以將所有人的
  session依照user  id放在不同的目錄下,但要考慮到當user多的時後,
  inode可能會不夠用..

论坛徽章:
0
发表于 2004-11-01 16:53 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

谢谢您的回复:)

1。我的文本Session,准备自己写模块,或者用cation 老兄写的DigiSession 模块,所以。。时效自己定义的。。

2。您的意思我明白,但是由于密码等敏感信息写在文本Session中,删除了他的文本Session,我只从cookie中如何知道他的信息合法呢?

3。4。我现在就是这个想法,但是就是困惑在实效(生存期)比较长的文本Session是否已经被废弃?

5。谢谢建议:) 我目前的打算是文本Session名字最后一道转化是MD5,所以按照首位字符分在了36个字目录下面:)

另外。我曾经想过把 文本Session 作成36个文件里面。考虑到同时访问的lock问题,加上文本Session 是必须正确的。所以。。放弃。。虽然每个文本Session一个文件有点浪费空间:)

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2004-11-01 20:15 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

2.cookies也可以給有效的時間...只是如果碰到假的cookies就會沒用..
  ..另外目前在jsp的作法是一旦session 過期,則該cookies會被廢棄..
  必須要重新login...你也可以這樣考慮..一旦發現session過期..就將
cookies清掉..跳回登入畫面..
3.要判斷是否已經被廢棄..其實在每次的網頁動作..
都需要去讀取這個  session  file..
所以每次session的有效時間都應該被更新..
如果cron 發現session已經很久沒有被更動了..
當然就要把他刪掉..而用戶即便有cookies也要視為
已經timeout..而必須重新登入..這是目前一般JSP與網頁上
的作法..你可以考慮考慮...

36個目錄..似乎有點不容易管理...
如果是我..傾向放在個別user的目錄下..
比較好管理..但是inode仍是一個應該考慮的問題...

原則上..這個程序建議最好用mod_perl來完成..
不然會慢得要命..光fork個process就要花上好多時間...

论坛徽章:
0
发表于 2004-11-01 21:45 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

是不是可以这样做。。。就是彻底取消“用户永久登入”之选项?最长也只给他7天。呵呵,那么超过7天的文本删不赦:)
这个也是目前JSP页面的做法了:)

不按照原来cookie的想法作了:)

至于目录。全部搁在 sessiondir 下的字目录下。。应该可以管理吧:)

程序会考虑mod_perl 下运行的。但是,在普通CGI下也能运行为好:)

谢谢您的建议:)

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2004-11-01 22:54 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

當然可以呀...討論是天馬行空的..

另外你要永久登錄的話..帳號密碼必須也存一份在cookies裡面..
.而不只是session id..一旦session id被刪掉.還可以用cookies
裡面的帳號密碼..

另外用mod_perl有個好處..你可以想辦法弄個connection pool...
因為我目前遭遇到的情形是..大概同時間40隻perl..向DB(informix) query
資料,就會感受到CGI變慢了..這是我在informix碰到的情形..其他DB Server
不清楚會不會有這個問題...感覺好像是informix每個socket port同時間可以服務
的request,是固定的...connection pool似乎是目前我所找到的比較好的
解決方法..

论坛徽章:
0
发表于 2004-11-01 23:30 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

恩。。这里和您讨论真是一种享受哦:)

如果cookie还保留有密码的话。那么我追求session的意思就失去了:) 所以。。。宁可不要永久登錄了:) 就让会员重新登陆吧:)

mod_perl。。 DB的数据连接池。。我还没有想到:)到时候向您请教吧:)

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2004-11-02 08:42 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

http://search.cpan.org/~mws/ResourcePool-1.0103/lib/ResourcePool.pod
這個就是我說的connection pool...

mod_perl..最近都在看java....好久沒碰了..:)

论坛徽章:
0
发表于 2004-11-02 12:43 |显示全部楼层

[讨论]关于Perl实现文本Session实现的一点困惑

谢谢:) 研究ing:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP