国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
跨域訪問(wèn)時(shí)Session丟失
發(fā)表時(shí)間:2008-11-07   最后修改:2008-11-07

我目前在做一個(gè)電子購(gòu)物網(wǎng)站。這個(gè)網(wǎng)站對(duì)應(yīng)著不同的國(guó)家,將會(huì)有不同的域名。比如,對(duì)英國(guó)會(huì)是www.xxx.com.uk,對(duì)中國(guó)可能是www.xxx.com.cn。但是,在涉及到支付時(shí),都會(huì)轉(zhuǎn)向一個(gè)地址:https://checkout.xxx.com。這些不同的域名,實(shí)際上是指向同一臺(tái)服務(wù)器的同一個(gè)Server。 

在實(shí)際使用中,由于域名不同,但又需要跨域訪問(wèn)。主要應(yīng)用場(chǎng)景是,客戶在英國(guó)的購(gòu)物網(wǎng)站-http://www.xxx.com.uk(簡(jiǎn)稱:uk站) 中往購(gòu)物車中放置了商品,最后,轉(zhuǎn)至https://checkout.xxx.cml來(lái)進(jìn)行支付工作。這時(shí)就碰到了跨域訪問(wèn)時(shí),Session丟失的問(wèn)題。 

先說(shuō)一下,我們用的服務(wù)器是Tomcat。Tomcat是通過(guò)url中的jsessionid以及cookie中的jsessionid來(lái)取得會(huì)話ID的。Tomcat先會(huì)查詢URL后面有沒(méi)有跟jsessionid。然后,再去解析Cookie中的jsessionid。如果cookie中有的話,那么,不管之前從URL中有沒(méi)有找會(huì)jsessionid,都會(huì)使用cookie中找到的。詳情參見(jiàn)Tomcat中的CoyoteAdapter類。 


問(wèn)題1:我打開(kāi)瀏覽器,在uk站中買了一件商品,當(dāng)我點(diǎn)擊頁(yè)面中的Check Out鏈接時(shí),頁(yè)面跳入了https://checkout.xxx.com的支付頁(yè)面后,用戶購(gòu)物車?yán)锏纳唐吩谔D(zhuǎn)在支付頁(yè)面中消失了。 

問(wèn)題原因:由于兩者的域名不同,在跳轉(zhuǎn)到支付頁(yè)面時(shí),丟失了原來(lái)的會(huì)話信息。無(wú)論是URL還是cookie中都找不到會(huì)話ID了。Tomcat創(chuàng)建了一個(gè)空空如也的新會(huì)話。 

解決辦法:重寫鏈接,在支付鏈接后加上jsessionid,也就是像這樣https://checkout.xxx.com;jsessionid=A8AB5D19484BFCF26E8E4F708E2F6C91.jvm1。在轉(zhuǎn)到支付頁(yè)面時(shí),由于此時(shí)瀏覽器中https://checkout.xxx.com域名的cookie中沒(méi)有任何信息,則Tomcat會(huì)使用URL中取得的sessionId。這樣,就能繼續(xù)使用uk站中的會(huì)話了。 


問(wèn)題2:通過(guò)URL重寫,我們可以在https://checkout.xxx.com的頁(yè)面能夠看到購(gòu)物網(wǎng)站的信息了,我本以為一切到此結(jié)束了,沒(méi)想到,又出現(xiàn)了新的問(wèn)題。在支付過(guò)程中,頁(yè)面使用Ajax和服務(wù)器做些數(shù)據(jù)的交互??擅看谓粨Q,服務(wù)器居然都報(bào)session中找不到用戶登錄信息的exception。仔細(xì)看了下日志,服務(wù)器在處理支付頁(yè)面上的初次的Ajax請(qǐng)求時(shí),居然創(chuàng)建了一個(gè)新的Session。 

問(wèn)題原因:在通過(guò)Ajax發(fā)送請(qǐng)求時(shí),Tomcat無(wú)法從URL中取得會(huì)話ID,之后,便試著去Cookie中查詢信息??纱藭r(shí),https://checkout.xxx.com下的cookie竟然是空空如也的。之前從購(gòu)物網(wǎng)站跳轉(zhuǎn)至https://checkout.xxx.com時(shí),Tomcat從URL中取得了原會(huì)話ID。此時(shí),Tomcat是繼續(xù)使用原有session,而沒(méi)有創(chuàng)建新的session,便沒(méi)有向?yàn)g覽器的cookie寫入信息JSESSIONID的信息了(這是我猜測(cè)的,沒(méi)看代碼證實(shí)過(guò))。 

解決辦法:既然能在轉(zhuǎn)入支付頁(yè)面時(shí)使用原有的Session,那么,就在剛轉(zhuǎn)入支付頁(yè)面時(shí),把sessionid寫入cookie不就行了嗎?這里我暫時(shí)用js把sessionid寫入了cookie中。之后做了幾次測(cè)試都順利地通過(guò)了。 


問(wèn)題3:好了,當(dāng)我以為一切都OK的時(shí)候,又出現(xiàn)了一個(gè)問(wèn)題。我先打開(kāi)www.xxx.com,也就是checkout.xxx.com的主域名。接著再打開(kāi)www.xxx.com.uk進(jìn)行購(gòu)買的操作。此時(shí),當(dāng)我轉(zhuǎn)入https://checkout.xxx.com時(shí),session又丟失了。 

問(wèn)題原因:其實(shí),這里的session沒(méi)有丟失。通過(guò)SessionID來(lái)看,在轉(zhuǎn)入https://checkout.xxx.com時(shí),由于之前打開(kāi)了其主域名www.xxx.com,在cookie中留下了host為xxx的session的信息。而在從購(gòu)物網(wǎng)站轉(zhuǎn)入支付頁(yè)面時(shí),Tomcat先從URL中取得了uk站的會(huì)話ID,但是最后又從cookie中取到了www.xxx.com的會(huì)話ID,并且使用了它。 

解決辦法:暫無(wú)。 

候選辦法1:修改Tomcat中的CoyoteAdapter類,讓它以URL中的jsessionid為主,以cookie中的為輔。但是,這樣做就會(huì)有個(gè)很大的問(wèn)題。那就是,如果用戶收藏了一個(gè)購(gòu)物站中的一商品的鏈接。而這個(gè)鏈接后面又跟了一個(gè)已經(jīng)失效的jsessionid,那么,服務(wù)器端會(huì)由于拿不到這個(gè)失效的jsessionid對(duì)應(yīng)的Session,而去創(chuàng)建一個(gè)新的會(huì)話。這樣子,就很有可能在同一個(gè)瀏覽器中訪問(wèn)相同的站點(diǎn),但卻面對(duì)著不同的會(huì)話。 

候選辦法2:讓公司再單獨(dú)開(kāi)個(gè)域名,專門負(fù)責(zé)處理check out。在進(jìn)入這個(gè)域名前,對(duì)header中的referer信息進(jìn)行驗(yàn)證,如果來(lái)自購(gòu)物網(wǎng)站,則對(duì)請(qǐng)求進(jìn)行正常處理。反之,則重定向到其它的域名。不知道重寫向時(shí),會(huì)不會(huì)向cookie中寫入信息?這個(gè)不知道可行否。 

不知道各位對(duì)應(yīng)問(wèn)題3的情況有什么處理建議嗎?還望大家不吝賜一二呀。 

PS. 據(jù)說(shuō),SSL證書是針對(duì)域名收錢的。所以,我們針對(duì)不同國(guó)家或有不同的域名。但對(duì)于支付,都是跳轉(zhuǎn)到https://checkout.xxx.com這一個(gè)來(lái)進(jìn)行的。這樣,只需要一張SSL證書就行了。 

補(bǔ)充:目前我們都只是在做一個(gè)國(guó)家的站點(diǎn),checkout測(cè)試也是針對(duì)一個(gè)國(guó)家的。但實(shí)際上,各個(gè)不同的國(guó)家的站點(diǎn),其實(shí)是不同的webapp。它們?cè)谥Ц稌r(shí)都會(huì)轉(zhuǎn)向的那個(gè)checkout網(wǎng)站,也只能是個(gè)獨(dú)立的webapp了。那么,這就不是單靠個(gè)sessionid就能和各個(gè)國(guó)家的站點(diǎn)共享他們的session的問(wèn)題了。 而是兩個(gè)不同的應(yīng)用間,共享數(shù)據(jù)的問(wèn)題了。 

兜了圈子,猛然發(fā)現(xiàn),現(xiàn)在我在努力解決的問(wèn)題,不是將來(lái)要實(shí)際面對(duì)的問(wèn)題??窈?。
 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java web會(huì)話跟蹤技術(shù)(深入理解HTTP Session與Cookie)
apache 反向代理 session cookie丟失問(wèn)題
Tomcat禁用cookie時(shí)沒(méi)有自動(dòng)URL rewriting,沒(méi)有加上jsessionid?
session功能實(shí)現(xiàn)原理
jsp/servlet 深入解析session本質(zhì)
Session原理和Tomcat實(shí)現(xiàn)分析
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服