最近做一个项目,其中用到购物车,因为看到网上流行的一些在ASP中处理购物车的手法,都不是特别理想,因此,想重新构造一个购物车类.由于购物车本质上是一个集合,于是想到了VBSCRIPT中的dictionary,上网查了一下,还真没有谁写出来dictionary实现的购物车,大部分人都是用数组和字符串来实现的.
搜到的仅有信息,也是某人停留在表达层面上的思路.其实这思路呢,对ASP了解的人,都会想到.
于是乎,自己开始写.
按构思,其实很简单,additem,removeitem,updateitem,batchremove,batchupdate这些方法,只要利用dictionaray中的对应方法及属性即可完成
接下来,开始测试代码,additem,没有问题,batchadditem,传入一个checkbox选中的产品ID逗号分隔字符串,也没问题.
挺高兴,接下来,试试removeitem,也没问题,再接下来,试试让用户选择checkbox来remove,没问题,正以为大功告成.这时,突然发现,不对,明明选中了两个,但batchremove,只remove掉一个.于是,response,调试,batchremove的执行逻辑似乎没有问题,循环次数都正确,但是,就是没有少移掉一个产品,以为是缓存,于是response.expire=0,发现,还是这个问题.
于是,开始在狗狗上查"vbscript dictionary bug",发现,果然微软先后在2001和2006年发由了两个BUG报告.其中有一个报告说到如果获取一个checkbox list的值,再存入dictionaray,将dictionary放入session,则有可能破坏掉session的值.
不过,很好笑的是,明明微软知道他的vbscript有这个BUG,却没有推出新的版本来修复,而是教人用一种极变态的方法来规避,不过,能规避也倒好,可我发现,用它的办法,仍然无解

后来,就继续在狗狗上查,这回查session dictionary.发现在wrox出的<asp 3.0高级编程中>其实有讨论到dictionary和session的冲突.大体的意思是:
"微软在设计dictionary时,本身是为客户端而设计,因此,如果在服务器端使用dictionary,而又将其放入session,则有可能损坏session.因此,不建议在服务器端使用session"
这本书还是比较严谨的,我相信,他们是做了验证.我想,可能如他们所言,本来就是为客户端设计的吧.
不过,这样,确实很没说服务.要么微软就让dictionary干脆无法在服务器端实现,要么,既然可以用在服务器端,干嘛不让它可以好好的用呢?
这样来看,微软其实也不是一个负责任的公司.尤其他的产品被开发者用来做生产工具,影响非常大,一个小小的BUG,而他又不明示出来,让多少开发者浪费时间走弯路呀