Spring MVC之cookies跟session 數據綁定

在我最先接觸web開發的中學時代,學習的asp技術對於session的概念其實很清楚html

Session("username")="張三"
下次要用的時候,直接用session來取就OK了

因爲http會話是無狀態的,因此你不知道發來請求的是哪一個客戶,web

因此數據須要綁定到每一個用戶的客戶端上,最經常使用的技術就是 session跟cookies ,spring

Cookies持有本地信息(可是作服務端的必定不能經過cookies來簡單驗證用戶權限,由於cookies會被篡改,最多見的是早期不少asp管理系統經過cookies來留存用戶權限級別,而後簡單地經過cookies來作業務邏輯驗證,瀏覽器

也是好笑,那個時候我經過這個辦法,用普通用戶登陸而後篡改cookies得到管理用戶權限黑過某些個政府網站以及學校的成績管理系統),服務器

而後服務端(J2EE規範是JSEESIONID)這個是做爲token存放在你的cookies裏面的,每次在你關閉瀏覽器(也就是關閉全部TCP鏈接的時候,tomact服務器會默認這個token失效,在你下一次請求的時候會給你分配新的sessionid)cookie

上面是截圖session

-------------------------------mvc

http://www.cnblogs.com/liukemng/p/3736948.html 我是照這篇博客學習的數據綁定app

下面講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中並無被清空,因此你單獨提交一次密碼,依然會顯示你上次提交的用戶名
相關文章
相關標籤/搜索