日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题...

發(fā)布時(shí)間:2024/4/17 windows 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以前都是開(kāi)始一段廢話的,現(xiàn)在直接進(jìn)入主題,首先介紹一下一些概念:

單頁(yè)應(yīng)用:

優(yōu)點(diǎn):
  • 具有桌面應(yīng)用的即時(shí)性、網(wǎng)站的可移植性和可訪問(wèn)性。
  • 用戶體驗(yàn)好、快,內(nèi)容的改變不需要重新加載整個(gè)頁(yè)面,web應(yīng)用更具響應(yīng)性和更令人著迷。
  • 基于上面一點(diǎn),SPA相對(duì)對(duì)服務(wù)器壓力小。
  • 良好的前后端分離。SPA和RESTful架構(gòu)一起使用,后端不再負(fù)責(zé)模板渲染、輸出頁(yè)面工作,web前端和各種移動(dòng)終端地位對(duì)等,后端API通用化。
  • 對(duì)前端人員javascript技能要求更高,促使團(tuán)隊(duì)技能提升。
  • 缺點(diǎn):
  • 不利于SEO。
  • 初次加載耗時(shí)相對(duì)增多。
  • 導(dǎo)航不可用,如果一定要導(dǎo)航需要自行實(shí)現(xiàn)前進(jìn)、后退。
  • 對(duì)開(kāi)發(fā)人員技能水平、開(kāi)發(fā)成本高。
  • 多角色:項(xiàng)目設(shè)計(jì)中多角色參與,比如我現(xiàn)在做的系統(tǒng),除了有個(gè)人用戶,還有開(kāi)店的商戶進(jìn)行登錄2種角色

    session:這個(gè)不多說(shuō),后臺(tái)系統(tǒng)判斷用戶活躍存在的一種身份憑證。PS:現(xiàn)在很多大型公司都自己做session管理

    ?

    問(wèn)題再現(xiàn)

  • ?在一個(gè)瀏覽器中,首先使用個(gè)人用戶登錄(現(xiàn)在該瀏覽器針對(duì)該站點(diǎn)發(fā)送的請(qǐng)求為個(gè)人用戶的session)
  • ?然后在瀏覽器中新開(kāi)一個(gè)標(biāo)簽頁(yè),同樣訪問(wèn)該網(wǎng)址,然后安全退出,清除cookie保存的一些信息和服務(wù)器的session數(shù)據(jù)。然后使用商戶賬號(hào)進(jìn)行登錄(現(xiàn)在整個(gè)瀏覽器針對(duì)于該域名,發(fā)送的請(qǐng)求都使用該商戶的session)
  • 現(xiàn)在切換到第一個(gè)標(biāo)簽頁(yè),是個(gè)人的首頁(yè),然后點(diǎn)一個(gè)功能按鈕,監(jiān)控xhr的請(qǐng)求,你會(huì)發(fā)現(xiàn)個(gè)人用戶請(qǐng)求的session憑據(jù)并不是個(gè)人的,被商戶的標(biāo)識(shí)覆蓋了,且占用了商戶的session去發(fā)送請(qǐng)求
  • 這樣得到的結(jié)果肯定是錯(cuò)的。所以必須解決該問(wèn)題

  • ?

    測(cè)試淘寶

    •  登錄第一個(gè)賬戶

    • 新開(kāi)標(biāo)簽頁(yè)輸入相同網(wǎng)址

    • 網(wǎng)頁(yè)會(huì)自動(dòng)跳轉(zhuǎn)到和標(biāo)簽也一樣的頁(yè)面

    • 退出登錄新的賬號(hào),第一個(gè)標(biāo)簽頁(yè)還是在第一個(gè)人的個(gè)人中心那里

    • 登錄第二個(gè)賬戶,這個(gè)時(shí)候第一個(gè)標(biāo)簽頁(yè)是第一個(gè)賬戶的個(gè)人信息,第二個(gè)標(biāo)簽頁(yè)是第二個(gè)賬戶的個(gè)人信息

    • 這個(gè)時(shí)候,瀏覽器針對(duì)這個(gè)域名,其實(shí)存儲(chǔ)的已經(jīng)是第二個(gè)賬戶的所有信息了,包括session_id。所以點(diǎn)擊第一個(gè)標(biāo)簽頁(yè)的任何操作,如果不刷新頁(yè)面的話(也就是單頁(yè)應(yīng)用),會(huì)以第二個(gè)用戶的session_id去請(qǐng)求數(shù)據(jù)。但是淘寶是刷新整個(gè)頁(yè)面就不存在這個(gè)問(wèn)題了。

    • 這樣整頁(yè)刷新就是第二個(gè)賬戶的所有的信息了。如果系統(tǒng)多角色,而且多角色菜單啊,和業(yè)務(wù)功能不一樣的話,就會(huì)更明顯發(fā)現(xiàn)大問(wèn)題,搶占session,無(wú)法正確請(qǐng)求數(shù)據(jù)

    ?

    ?

    解決方案

      確立解決手段:經(jīng)過(guò)測(cè)試淘寶網(wǎng)站發(fā)現(xiàn),淘寶針對(duì)這種問(wèn)題,每次操作都會(huì)刷新頁(yè)面,因?yàn)樗⑿马?yè)面所有數(shù)據(jù)都將重新向后臺(tái)請(qǐng)求,所以不會(huì)存在該問(wèn)題:不刷新頁(yè)面然后通過(guò)ajax一步請(qǐng)求數(shù)據(jù)。所以解決手段就是只要刷新頁(yè)面全部重新請(qǐng)求數(shù)據(jù)就不會(huì)出現(xiàn)這個(gè)問(wèn)題。

      關(guān)鍵問(wèn)題:怎么去讓瀏覽 器每次去鑒別是否為一個(gè)用戶,然后讓瀏覽器主動(dòng)去刷新頁(yè)面

      解決步驟

  • 因?yàn)閱?wèn)題關(guān)鍵是用戶發(fā)出的請(qǐng)求會(huì)被商戶的覆蓋叼,所以確認(rèn)第一步在用戶每次請(qǐng)求的時(shí)候去檢查用戶session_id是否一致(為同一個(gè)用戶)
  • 在前端每次發(fā)送ajax請(qǐng)求的時(shí)候去檢查每次用戶登錄的時(shí)候緩存的session_id是否和當(dāng)前瀏覽器登錄的用戶使用的session_id是否一致
  • 因?yàn)榘踩顺龅臅r(shí)候我們會(huì)清除所有該域名下的cookie(這是我們?cè)O(shè)定的規(guī)則),然后用戶登錄更新cookie,所以cookie中無(wú)法去檢測(cè)是否一致。PS:其實(shí)在cookie中也可以判斷,每次登錄判斷oldSession_id是否有值,沒(méi)有的話就將oldSession_id和newSession_id都設(shè)置為該用戶的Session_id,安全退出的時(shí)候只清除newSession_id,用戶在新標(biāo)簽頁(yè)再登錄的時(shí)候判斷oldSession_id的值,然后設(shè)置newSession_id的值。這樣就可以比對(duì)了,但是我們的規(guī)則是清除所有的cookie,所以沒(méi)辦法,這里我們走不通。
  • 最后靈光一閃,想到了單頁(yè)應(yīng)用的優(yōu)點(diǎn):不刷新頁(yè)面,從而進(jìn)行局部刷新或操作。這就代表著,單頁(yè)應(yīng)用每次進(jìn)行dom渲染完成之后,就不會(huì)第二次渲染整個(gè)頁(yè)面的dom,也就代表了window對(duì)象不會(huì)像每次頁(yè)面刷新重置window中的方法和對(duì)象了,那么我們就可以將每次緩存當(dāng)前用戶的session_id到window對(duì)象中,這樣的話,我們每次請(qǐng)求的時(shí)候取到每次用戶登錄緩存的session_id和及時(shí)更新的cookie中的當(dāng)前用戶的session_id進(jìn)行比對(duì),如果不一樣,那么就可以刷新頁(yè)面,整個(gè)頁(yè)面重新去請(qǐng)求整個(gè)數(shù)據(jù),這樣就不會(huì)出現(xiàn)這樣覆蓋session_id的問(wèn)題
  • 好了,問(wèn)題解決了,但是需要注意的是,每次新開(kāi)一個(gè)單頁(yè)應(yīng)用頁(yè)面都要緩存一下session_id這樣很繁瑣,但是沒(méi)辦法,業(yè)務(wù)規(guī)則確定了安全退出,不留任何痕跡。繁瑣不是問(wèn)題,解決問(wèn)題才不是問(wèn)題
  • ?

    其實(shí)解決問(wèn)題的方式有千萬(wàn)種,沒(méi)有你解決不了的,只有你想不到的。程序員的路還很漫長(zhǎng),如果目標(biāo)更大一點(diǎn),架構(gòu)師啊或者其他的話,這樣的路更長(zhǎng)。而且在職場(chǎng)的話,老板不是要的你的各種阻塞的理由,而是一個(gè)結(jié)果,你解決了沒(méi)有?解決了,ok能力杠杠的,解決不了,對(duì)不起,能力還欠缺。所以,我的原則是:能做的,漂亮的解決;不能做的,評(píng)估一下,想方設(shè)法去解決,這樣才能讓老板或者你的上司相信你,安心把事情給你做,這樣的話,老板器重你了,升職加薪也不是問(wèn)題咯。

    ?

    分享我的全棧書(shū)簽(持續(xù)集成中):https://github.com/GerryIsWarrior/MyBookmarks ? 希望點(diǎn)顆星,這才是我的動(dòng)力

    ?

    個(gè)人簡(jiǎn)介:

    • 性別:男
    • 愛(ài)好:女
    • 目標(biāo):全棧架構(gòu)師
    • github:https://github.com/GerryIsWarrior

    轉(zhuǎn)載于:https://www.cnblogs.com/GerryOfZhong/p/6094612.html

    總結(jié)

    以上是生活随笔為你收集整理的以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。