发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

由Core J2ee Patterns想到的一个问题

2003-08-07 09:27
赞助商链接

最近在看Core J2ee Patterns这本书.
看遍了全书有个地方一直不明白,就是为了防止重复提交页面而做的同步令牌(根据SessionID和时间生成的唯一值),页面里面的隐藏域和Session里面都放了这个值,如果两处的值不一样,就表明是重复提交.
我不明白的是既然这个值是唯一生成的,就表明他只能生成一次,在页面的隐藏域和Session里都要放置这一个值(一个在页面设置,一个在提交的Action动作里设置,怎么共享这一个值呢),如果是重复提交,怎么可能其中一个值会发生变化,而另外一个不变呢
(另外,假如在IE中通过返回按钮或者停止按钮终止一个页面提交,服务器端会发生什么变化呢?)

2003-08-07 09:58

关于structs的部分,我不了解,没法谈。
但关于Token,你的疑问还是可以解的:

谈到提交,必然有一个表单,这个表单是由一个JSP生成的,而这个JSP一定是由某个Ctroller Servlet dispatch过来的。
在用户提交一个填写表单的请求后,请求经过一系列处理,最终会到达dispatch前的一步,也就是生成表单前,这时做下列事情:
1。获取Token。
2。将Token存入session
3。将Token作为request的参数,将request dispatch到生成表单的页面
4。生成表单的页面将Token做成hidden Field。

这时候,在客户端浏览器查看源文件看到的Token和session的Token值是一样的。

这时,用户填完单子,点击提交,一个request被送到服务器,服务段处理程序接到request ,核对Token ,如果match,改变session的Token ,处理请求。
用户等待的过程中,又点击提交,Token已经不再match了。

我觉得还是想得通的。

2003-08-07 10:22

多谢

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com