Spring MVC之cookies跟session 数据绑定
在我最早接触web开发的中学时代,学习的asp技术对于session的概念其实很清楚
Session("username")="张三"
下次要用的时候,直接用session来取就OK了
由于http会话是无状态的,所以你不知道发来请求的是哪个客户,
所以数据需要绑定到每个用户的客户端上,最常用的技术就是 session跟cookies ,
Cookies持有本地信息(但是做服务端的一定不能通过cookies来简单验证用户权限,因为cookies会被篡改,最常见的是早期很多asp管理系统通过cookies来留存用户权限级别,然后简单地通过cookies来做业务逻辑验证,
也是可笑,那个时候我通过这个办法,用普通用户登录然后篡改cookies获得管理用户权限黑过某些个政府网站以及学校的成绩管理系统),
然后服务端(J2EE规范是JSEESIONID)这个是作为token存放在你的cookies里面的,每次在你关闭浏览器(也就是关闭所有TCP连接的时候,tomact服务器会默认这个token失效,在你下一次请求的时候会给你分配新的sessionid)
上面是截图
-------------------------------
http://www.cnblogs.com/liukemng/p/3736948.html 我是照这篇博客学习的数据绑定
下面讲springmvc的分段数据绑定,我今天早上一直没理解模型对象是在何时被框架请求进入内存调用 后来才搞清楚
@ModelAttribute("sessionaccountmodel") public AccountModel initAccountModel(){ return new AccountModel(); }
作为bean组件,它的生命周期最长是在session失效,也就是客户端浏览器关闭TCP连接的时候。
@RequestMapping(value="/usernamebind", method = {RequestMethod.GET}) public String userNameBind( Model model, @ModelAttribute("sessionaccountmodel")AccountModel accountModel){ System.out.println(accountModel.toString()+" 1"); model.addAttribute("sessionaccountmodel", accountModel); return "usernamebind"; } @RequestMapping(value="/usernamebind", method = {RequestMethod.POST}) public String userNameBindPost( @ModelAttribute("sessionaccountmodel") AccountModel accountModel){ //重定向到密码绑定测试 System.out.println(accountModel.toString()+" 2"); return "redirect:passwordbind"; } @RequestMapping(value="/passwordbind", method = {RequestMethod.GET}) public String passwordBind(@ModelAttribute("sessionaccountmodel") AccountModel accountModel){ System.out.println(accountModel.toString()+" 3"); if (accountModel.getUsername()==null){ return "redirect:usernamebind"; } return "passwordbind"; } @RequestMapping(value="/passwordbind", method = {RequestMethod.POST}) public String passwordBindPost(@ModelAttribute("sessionaccountmodel") AccountModel accountModel, SessionStatus status){ System.out.println(accountModel.toString()+" 4"); if (accountModel.getUsername()==null){//防止用户从passwordbing提交密码 return "redirect:usernamebind"; } //status.s
//status.setComplete(); //显示绑定结果 return "sessionmodelbindresult"; }
上面我分别打印了accountModel的toString方法返回了对象的地址,也就是说这个对象是一直存在的
在最后我注释了
status.setComplete();
这个方法被注释后,你可以在 /passwordbing页面重新提交一次密码,然后你会看到页面并不会被跳转到/usernamebind
原因在于一开始创建的模型在绑定在session中并没有被清空,
所以你单独提交一次密码,依然会显示你上次提交的用户名
posted on 2016-09-12 21:39 winters86 阅读(1814) 评论(0) 编辑 收藏 举报