码迷,mamicode.com
首页 > 编程语言 > 详细

Spring MVC之cookies跟session 数据绑定

时间:2016-09-12 22:03:17      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

在我最早接触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中并没有被清空,
所以你单独提交一次密码,依然会显示你上次提交的用户名

 

Spring MVC之cookies跟session 数据绑定

标签:

原文地址:http://www.cnblogs.com/winters1992/p/5866453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!