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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何在多台web服务器上共享session?

發(fā)布時(shí)間:2024/9/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在多台web服务器上共享session? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

比如:現(xiàn)在有三臺(tái)php服務(wù)器,且實(shí)現(xiàn)了負(fù)載均衡,如何讓這三臺(tái)web服務(wù)器共享session數(shù)據(jù)? session數(shù)據(jù)默認(rèn)是以文件的形式保存在web服務(wù)器的磁盤(pán)上,一般都是用戶登錄成功的時(shí)候,保存session數(shù)據(jù)。 同一個(gè)用戶登錄后,就會(huì)將session保存在某個(gè)web服務(wù)器上,假設(shè)是保存在服務(wù)器A上,該用戶訪問(wèn)網(wǎng)站的其他頁(yè)面時(shí),可能請(qǐng)求的就是服務(wù)器B或服務(wù)器C,但服務(wù)器B或服務(wù)器C上并沒(méi)有該用戶的session文件,這樣,就會(huì)導(dǎo)致網(wǎng)站誤認(rèn)為該用戶未登錄,用戶的登錄狀態(tài)丟失的問(wèn)題。 歸根結(jié)底,就是要解決多臺(tái)web服務(wù)器共享session的問(wèn)題,至少有以下三種方法:
一、將本該保存在web服務(wù)器磁盤(pán)上的session數(shù)據(jù)保存到cookie中用cookie會(huì)話機(jī)制替代session會(huì)話機(jī)制,將session數(shù)據(jù)保存到客戶端瀏覽器的cookie中,這樣同一個(gè)用戶訪問(wèn)同一網(wǎng)站時(shí),無(wú)論負(fù)載均衡到哪臺(tái)web服務(wù)器,都不用再去服務(wù)器請(qǐng)求session數(shù)據(jù),而直接獲取客戶端cookie中的session數(shù)據(jù)。如此,同一個(gè)用戶的登錄狀態(tài)就不會(huì)丟失了。 但這樣做,有三大弊端:
  • 把session數(shù)據(jù)放到客戶端的cookie中,一般都是重要數(shù)據(jù)(如用戶id、昵稱(chēng)等),會(huì)存在安全問(wèn)題,但可以將session數(shù)據(jù)加密后,再存放到cookie中,來(lái)降低安全風(fēng)險(xiǎn)。
  • 瀏覽器對(duì)單個(gè)cookie的數(shù)據(jù)量大小限制為4K左右,因此會(huì)存在數(shù)據(jù)量的限制問(wèn)題。
  • 影響帶寬性能,降低了頁(yè)面的訪問(wèn)速度。在高訪問(wèn)量的情況下,用戶每次請(qǐng)求時(shí),都要將客戶端cookie中的session數(shù)據(jù)發(fā)送到服務(wù)器,要占用較多的帶寬,進(jìn)而影響訪問(wèn)速度,服務(wù)器帶寬成本增高。

  • 二、將本該保存在web服務(wù)器磁盤(pán)上的session數(shù)據(jù)保存到MySQL數(shù)據(jù)庫(kù)中 sessionid還是利用cookie機(jī)制存儲(chǔ)到客戶端,但session數(shù)據(jù)卻存放在MySQL服務(wù)器上。(需要建立sessionid和session數(shù)據(jù)行的對(duì)應(yīng)關(guān)系) 但這樣做,只適合訪問(wèn)量比較小的網(wǎng)站。如果網(wǎng)站的訪問(wèn)量比較大,對(duì)MySQL服務(wù)器會(huì)造成很大壓力。因?yàn)槊看斡脩粽?qǐng)求頁(yè)面(即使是刷新頁(yè)面)都要查詢MySQL數(shù)據(jù)庫(kù)中的session數(shù)據(jù)表,進(jìn)而判斷用戶的登錄狀態(tài)和讀取用戶相關(guān)信息,勢(shì)必會(huì)對(duì)數(shù)據(jù)庫(kù)服務(wù)器造成很大壓力,這樣就會(huì)降低服務(wù)器的響應(yīng)速度,影響用戶體驗(yàn)。
    三、將本該保存在web服務(wù)器磁盤(pán)上的session數(shù)據(jù)保存到內(nèi)存數(shù)據(jù)庫(kù)(memcache或redis memcache或redis是基于內(nèi)存存儲(chǔ)數(shù)據(jù)的,性能很高,尤其是高并發(fā)的情況下尤為合適。主要是因?yàn)閺膬?nèi)存中讀取數(shù)據(jù)要比從磁盤(pán)讀取數(shù)據(jù)快很多。 內(nèi)存數(shù)據(jù)庫(kù)還支持?jǐn)?shù)據(jù)過(guò)期失效的機(jī)制,正好與session的過(guò)期機(jī)制對(duì)應(yīng),推薦使用redis內(nèi)存數(shù)據(jù)庫(kù),因?yàn)樗萴emcache支持更多的 數(shù)據(jù)類(lèi)型,且支持內(nèi)存數(shù)據(jù)備份到磁盤(pán)。
    這里簡(jiǎn)單說(shuō)一下,后面兩種方法的注意要點(diǎn):
    • 如果多臺(tái)web服務(wù)器對(duì)應(yīng)的是不同的域名,為了保證cookie的唯一(同一個(gè)cookie在各個(gè)域名有效),需要修改php.ini文件中的session.cookie_domain
    • 由于后面兩種方法,屬于用戶自定義的方式管理session,而非默認(rèn)的文件處理方式,故需修改php.ini中的session.save_handler=user
    • 在開(kāi)啟session之前(即調(diào)用session_start()之前),需要先調(diào)用session_set_save_handler,關(guān)于session_set_save_handler的具體用法,請(qǐng)參考php手冊(cè)

    來(lái)源:http://blog.csdn.net/lamp_yang_3533/article/details/51984201

    總結(jié)

    以上是生活随笔為你收集整理的如何在多台web服务器上共享session?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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