关于struts2的token和session的问题?

电灯泡 2010-10-25 02:47:53
大家好,网上搜了struts2的token机制,有所明白,其中摘录了一段:

服务器端在处理到达的请求之前,将request中的Token值(如果你查看解析后JSP源代码,会发现有个 org.apache.struts.taglib.html.TOKEN的隐藏域)与保存在当前用户session中的令牌值进行比较,看是否匹配。如果一样,则提交处理,否则,根据配置会迁移到指定画面。

在处理完客户端的请求后,服务器端会把处理结果返回给客户端。那么在response发送给客户端之前,将会产生一个新的Token,该Token的值除了传给客户端以外,也会将用户session中保存的旧的Token替换掉。也就是说,隐藏域的token值发生了变化,session中的token也发生了变化。

这时候,如果通过IE的返回按钮,回到原来画面的话,隐藏域中的token值又恢复到变化前,这时候如果再次提交的话,客户端传过来的Token值和服务器端的就不一致,这时候画面会迁移到指定画面。从而避免重复提交。


我的问题:
1 红字部分,保存在当前用户session中的令牌值。如果我还没有登录系统即没有取得session,那request的Token值怎么和当前session的token值(session都还没取得)比较呢?
2 在项目的web.xml的配置中,由配置如下:
<session-config>
<session-timeout>5</session-timeout>
</session-config>
这个配置中的session和登入系统后取得的session有什么区别?是同一个session吗?
...全文
686 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
webrobot 2010-10-26
  • 打赏
  • 举报
回复
这个方式你可以自己做。自己放入 sesson中一个值。然后对比。

struts刚好提供了这么个方式的方法。去使用。其实道理都一样。进行存储值对比。至于更深层次理解,暂时不知。
电灯泡 2010-10-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 panjinbo1001 的回复:]

1 红字部分,保存在当前用户session中的令牌值。如果我还没有登录系统即没有取得session,那request的Token值怎么和当前session的token值(session都还没取得)比较呢?

你调用web应用时,就会创建session对象,不是说“还没有登录系统即没有取得session”,你登陆时 会创建一个新的session对象覆盖掉以前的那个老session,如果刷新页面……
[/Quote]
当开始调用web应用时,创建了session对象,里面保存了一些key/value。当用户登录系统后操作session.setAttribute("user",User);你的意思是再put一个属性"user"进入老的session吗?还是覆盖老的session后再put一个"user"进入新的session?
panjinbo1001 2010-10-26
  • 打赏
  • 举报
回复
1 红字部分,保存在当前用户session中的令牌值。如果我还没有登录系统即没有取得session,那request的Token值怎么和当前session的token值(session都还没取得)比较呢?

你调用web应用时,就会创建session对象,不是说“还没有登录系统即没有取得session”,你登陆时 会创建一个新的session对象覆盖掉以前的那个老session,如果刷新页面的话,session值也会发生变化。
keven_2008 2010-10-25
  • 打赏
  • 举报
回复
session-timeout 是配置工程的session失效时间。
所有session建立后,一定时间内没有与服务器交互则就会被销毁。

session设置为永不过期,程序持续运行一段时间后,会出现内存溢出。不能量化,取决于session建立的个数和session存放的东西的大小。
电灯泡 2010-10-25
  • 打赏
  • 举报
回复
wait...
电灯泡 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 blazingfire 的回复:]

2;不一样,老的session被移除,再访问创建新的session
[/Quote]
请问老的session被移除是不是指,当用于登录系统后,web.xml中的配置<session-timeout>5</session-timeout>已经不能作用新创建的session?

电灯泡 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 s0s0s0s 的回复:]

我的理解:

即使没有登录依然有一个session与你对应,只是这个session中没有你的登录信息,但是他却可以保存与你的请求相对应的其他信息。

那个配置是指session的最大不活跃时间,超时session就会被销毁。设置的过小会给用户造成麻烦,过大会增加服务器的负担。
[/Quote]
比如我设置为<session-timeout>-1</session-timeout>,则表示永不过期。像你说的,如果这样配置会不会增加服务器的负担呢?增加多少呢,可以量化吗?
s0s0s0s 2010-10-25
  • 打赏
  • 举报
回复
我的理解:

即使没有登录依然有一个session与你对应,只是这个session中没有你的登录信息,但是他却可以保存与你的请求相对应的其他信息。

那个配置是指session的最大不活跃时间,超时session就会被销毁。设置的过小会给用户造成麻烦,过大会增加服务器的负担。
blazingfire 2010-10-25
  • 打赏
  • 举报
回复
1;只要你访问了web应用,session对象就有了,不管你有没有登录系统。
2;不一样,老的session被移除,再访问创建新的session

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧