ASP清除Application缓存的问题
Asp中的 Application 是一个公用的对像
我们可以用一个语句来清理服务器上的所有Application 对像
application.contents.removeall '清空所有缓存
会员登陆后修改application变量,比如我们用一个application("login")=true表示登陆了.那么登陆时就应该先进行一次的application("login")=ture
直到其退出后才会将其值修改为false.
当然登陆前先检查一下application("login")的值,若不存在或是false就可以让其进行登陆,否则做出限制跟转至错误提示页面.
而session只是一个单用户的级别,不合适用的.而session变量是其他用户根本取不到的.
剩下要考虑的是非正常退出等,如果user1直接关闭的浏览器,那么没有退出时进行修改application("login")的值,这时会发生所有用户都登陆不上的问题.这里要用到session_OnEnd事件进行一次的清除变量,这里面显然要加上application("login")=false或null这样的修改.但是还要把session.tiomeout时间设短一点,要不如果某用户关闭后要等很长的时间后才可能登陆的.但是过短又不行,如果太短的话,你的这个用户连一个填写表单完成的机会都没有,那么user2会抢先登陆进去的.显然,这里最好的办法就是增加一个提醒机制进行计时,比如我设的是十分钟,在登陆者的页面上会出现计时的,倒计至9分钟左右让其点一个按钮与服务器交互一下,这样计时器重新从十分钟开始计时.或者写一个小的自动请求服务的ajax,让其每隔1分钟向服务器发一次请求,这样时间你可以设置为略大于1分钟而保证在线者的不掉线,别人不能抢入,而其关闭后,显然1分钟后允许别人登陆.
过期页面的处理,如果一个用户在session时间内无任何服务器动作的话,可由别的登陆用户进行抢入,这时,也就是十分钟后,该页面进行了刷新操作,此时必须把这个用户进行一个过期处理.不能让其再进入,如果不加过期处理,此时会发生两个人同时在线的情况.
抢登陆,假定两地都有用户在同时抢登陆时,如果进行处理.user1登陆时发现application("login")的值是可以登陆的.于是就正在填写,而user2此时也在读取application的值,发现可以登陆,那么两者会同时登陆上的.解决的办法是:
1,页面进行取值的方法,也就是说当有人请求login页面时就先进行application值的更改.其他用户再请求时已经不能请求到页面了.或请求到了不允话登陆的页面信息.但如果是这样的话,不管登陆没有登陆都是要清除的,所以session_OnEnd事件中不管是否登陆都要进行application的靖除的.
2.锁定变量的方法,application变量是可以锁定的,进入页面时先将application进行锁定,而其他用户是取不到值的.取不到值时就好办了,提示有用户正在尝试登陆.当然无论那个尝试登陆的是否登陆都要对其进行解锁的.也就是说在关闭页面中,最好是这样,写一个ajax进行application进行解除锁定.当然登陆完成时也要进行解锁定.最后是如果意外时,session_OnEnd也要进行尝试解锁定,如果变量正在锁定,则解锁定就是尝试解锁定的意思.
当然,数据库法也可以用的,数据库中有一个字段进行标志,但这样的解决方法只是将使用application变量,换成了使用字段而已.其他都是一样的.但速度上与安全上依赖于application变量比较好的.
一楼,session变量是一个用户级变量,请问另一个用户在登陆时如果得到其他用户的变量?这样不乱套了吗?别忘记一句话:每一个用户在请求页面时都自动生成一个session的.而application则是全局变量,网页的即时聊天就是来源于这个变量的.但变量过大时会占用服务器较大的内存的!
二楼,就是一个统计在线用户的程序,请问,考虑到两个用户在同时尝试登陆的情况吗?这种方法可以是登陆上,但必须加代码再测试一下是否有同时在线用户,如果有,必须让其当即退出登陆才行的,这样才能做到单用户登陆.
不过一个用户登陆的网站你干什么用呢?如果是单单限制登陆用户不能进入login界面的话,可以使用session值,在登陆界面中进行一次的简单判断嘛.那样的话又非常简单,比如登陆用户登陆后会有session("username"),在登陆页面上去查这个查是否为空或是否存在,若为空或存在则正常登陆,否则转向错误页面不就行了?
关键词:ASP
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 11
- 11
- 2
- 2
- 15