資源描述:
《對(duì)重復(fù)提交問(wèn)題解決的一些思路和想法》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、對(duì)重復(fù)提交問(wèn)題解決的一些思路和想法目前,隨著信息技術(shù)的快速發(fā)展,BS架構(gòu)的程序越來(lái)越普及,應(yīng)用越來(lái)越廣泛。同吋隨之而來(lái)的問(wèn)題也很多,最近做到一個(gè)后臺(tái)管理程序時(shí),考慮到重復(fù)登陸的問(wèn)題,于是開(kāi)始找解決辦法,但是網(wǎng)上沒(méi)有給出一個(gè)確切可行的方案。經(jīng)過(guò)一翻思考終于有了些須想法。首先這里用到了SESSION和APPLICATION的一些知識(shí),當(dāng)然也可以用COOKIE解決但是,有缺陷例如COOKIE被禁用了還得提示客戶打開(kāi)限制,這樣很可能讓客戶失去自己的耐心,但也不失為一條解決之道。廢話不多說(shuō)了直接上思路和代碼。思路
2、:我們?cè)谧龅顷懙臅r(shí)候大多數(shù)都是將用戶信息放入SESSION中以保存用戶的登陸狀態(tài)。因此重復(fù)提交問(wèn)題就變成了驗(yàn)證相應(yīng)的SESSION屮是否包含了登錄時(shí)用到的用戶信息。這里就出現(xiàn)了一個(gè)問(wèn)題了,就是如何找到對(duì)應(yīng)的SESSION對(duì)象呢。大家都知道,SESSION是瀏覽器訪問(wèn)服務(wù)器時(shí)服務(wù)器端SERVLET白主創(chuàng)建的擁有唯一SESSIONID的SESSION對(duì)象。也就是說(shuō),每個(gè)瀏覽器在訪問(wèn)服務(wù)器時(shí)都會(huì)創(chuàng)建SESSION,也就是說(shuō)我機(jī)器上有火狐和ie,用這兩個(gè)瀏覽器訪問(wèn)同一服務(wù)器的時(shí)候,該服務(wù)器就會(huì)對(duì)我這個(gè)用戶,針對(duì)
3、兩款不同的瀏覽器創(chuàng)建兩個(gè)SESSION對(duì)象,這樣我分別在兩款瀏覽器上登錄的時(shí)候就會(huì)相應(yīng)的在兩個(gè)SESSION對(duì)象中保存我的用戶信息,也就是重復(fù)登錄了(當(dāng)然這里是沒(méi)有解決問(wèn)題之前)。同吋解決問(wèn)題之前同一個(gè)瀏覽器在訪問(wèn)服務(wù)器吋也會(huì)有創(chuàng)建兩個(gè)SESSION對(duì)象的情況,例如:我用ie登錄了瀏覽器,然后我關(guān)閉了所有了瀏覽器再次登錄服務(wù)器相應(yīng)的我的用戶信息就在服務(wù)器中有兩個(gè)對(duì)應(yīng)的SESSION對(duì)象保存了。不管我的登錄狀態(tài)時(shí)什么樣的,同一賬戶理論上可以登錄n次。這就造成了極大的資源浪費(fèi),而且有著線程安全的問(wèn)題,同時(shí)也
4、讓系統(tǒng)變得更加不穩(wěn)定。解決之道:?使用COOKIE解決(此方法只支持同種瀏覽器,或者說(shuō)cookie保存在同一位置的瀏覽器,不過(guò)cookie保存位置可以設(shè)置,同志們關(guān)注一下,我提供的有相關(guān)圖表)當(dāng)用戶登錄時(shí)會(huì)得到相應(yīng)的SESSION對(duì)象,我們將SESSION相應(yīng)的唯一的SESSIONID獲取并保存在cookie文件(cookie保存在客戶端哦,大家都是知道的哈)中,這樣有用戶訪問(wèn)的時(shí)候我們先查cookie文件看看是否能獲取相應(yīng)的SESSIONID從而得到SESSION對(duì)象,如杲我們已盡登錄,那么SESSI
5、ON屮就會(huì)有相應(yīng)的用八信息,如果沒(méi)有說(shuō)明SESSION已經(jīng)過(guò)期重新創(chuàng)建session對(duì)彖,將Sessionld保存到指定的Cookie文件,然后重新登錄即可。代碼:Cookiecookiename=newCookie("Patametei'","Value");//cookie的倉(cāng)ij建例如:<%//每次登陸成功后用sessionld標(biāo)識(shí)userid并放入cookie文件中Stringsessionld=session.getTd();CookienewCookie=newCookie(sessionT
6、d,userid);//用sessionTd標(biāo)識(shí)useridresponse.addCookie(newCookie);%>這里涉及到cookie的創(chuàng)建和讀取,就多一點(diǎn)廢話。JSP是調(diào)用Cookie對(duì)象相應(yīng)的構(gòu)造函數(shù)Cookie(name,value)用合適的名字和值來(lái)創(chuàng)建Cookie,然后Cookie"J以通過(guò)IlttpServletResponse的addCookie方法加入到Set-Cookie應(yīng)答頭,本例中Cookie對(duì)彖有兩個(gè)字符串參數(shù):sessionld,sessionldo注意,名字和值都
7、不能包含空白字符以及下列字符:@:;?,〃/[]()二處理Cookie的屬性看到這里,有的朋友又要問(wèn)了:我光知道如何創(chuàng)建Cookie有什么用呀?是呀,光知道如何創(chuàng)建Cookie而不知道怎么使用是不夠的。在JSP中,程序是通acookie,setxxx設(shè)置各種屬性,用cookie.getXXX讀出cookie的屬性,現(xiàn)把Cookie的主要屬性,及其方法列于下,供大家參考:【類型1方法名方法解釋StringgwtComment()返回cookie中注釋,如果沒(méi)有注釋的話將返回空值.StringggtDoma
8、inO返回cookie中Cookie適用的域名.使用getDomainO方法可以指示瀏覽器把Cookie返回給同一域內(nèi)的苴他服務(wù)器,而通常Cookxe只返回給與發(fā)送它的服務(wù)器名字完全相同的服務(wù)器。注意域名必須以點(diǎn)開(kāi)始(例如.yesky.com)iritgetMajcAge()返回Cookie過(guò)期之前的星大時(shí)間,以秒計(jì)算口StringgetName()返回匚ookie的名字。名字和值是我;們始終關(guān)心的兩-個(gè)部分>筆者會(huì)在后[0]詳細(xì)J「紹ge