<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 60,comments - 71,trackbacks - 0

    本文來(lái)自:http://onewww.net/blog/article.asp?id=38

    今天突然發(fā)現(xiàn)我對(duì)Session有很大的誤解.
    一句話(huà)就是,一般情況下Session是需要Cookie支持的!
    大家都知道Session是在服務(wù)器端保存客戶(hù)狀態(tài)的,只要瀏覽器不關(guān)閉,就可以一直保存該用戶(hù)的信息,通常用做來(lái)保存是否登陸信息等.而Cookie與其剛好相反,它將信息保存到客戶(hù)端,它是寫(xiě)入文件的,俗成小甜點(diǎn)..
    今天做了個(gè)程序,是判斷是否登陸成功的,沒(méi)有使用Cookie,而全部使用的Session機(jī)制實(shí)現(xiàn)的.本來(lái)很好用,可吃完午飯后,突發(fā)起想的把瀏覽器的cookie禁止了,這時(shí)候產(chǎn)生了一件讓我很驚訝的事情session竟然不好用了,也就是說(shuō),無(wú)論我怎么登陸系統(tǒng),系統(tǒng)都認(rèn)為我沒(méi)有登陸! 當(dāng)我把cookie打開(kāi)后session就好用了,系統(tǒng)也恢復(fù)正常了?!這是怎么會(huì)事?感覺(jué)我和思維中的某種原則性的東西沖突了
    于是決定好好研究下.
    為什么登陸后,只要不關(guān)閉瀏覽器,session就能一直存在?當(dāng)然session的數(shù)據(jù)是保存在服務(wù)器上的,但服務(wù)器是怎么識(shí)別這些數(shù)據(jù)都是誰(shuí)的呢?答案是sessionid,每一個(gè)瀏覽者都唯一的sessionid,這就很好的區(qū)分了不同瀏覽者的不同session了.sessionid是怎么產(chǎn)生的?應(yīng)該是第一次訪(fǎng)問(wèn)服務(wù)器的時(shí)候隨即生成的.假如是111,然后他的登陸信息是true,服務(wù)器就知道sessionid為111已經(jīng)登陸了,這些信息都存在了服務(wù)器上了.但當(dāng)瀏覽者繼續(xù)操作的時(shí)候,也就是打開(kāi)該系統(tǒng)的另一個(gè)頁(yè)面的時(shí)候sessionid怎么辦?如何傳遞?打開(kāi)另一個(gè)頁(yè)面的時(shí)候其實(shí)相當(dāng)于重新訪(fǎng)問(wèn)系統(tǒng),如果沒(méi)有特殊的處理機(jī)制,系統(tǒng)會(huì)再次重新分配一個(gè)sessionid的,這樣的話(huà)就失去意義了~!所以sessionid在第一次訪(fǎng)問(wèn)后應(yīng)該存在了客戶(hù)端.能寸哪呢?當(dāng)然,只能寸在cookie中了,這就是為什么關(guān)閉cookie,session就失去作用了
    找到這么個(gè)例子來(lái)描述cookie session的關(guān)系再恰當(dāng)不過(guò)了
    一家咖啡店有喝5杯咖啡免費(fèi)贈(zèng)一杯咖啡的優(yōu)惠,然而一次性消費(fèi)5杯咖啡的機(jī)會(huì)微乎其微,這時(shí)就需要某種方式來(lái)紀(jì)錄某位顧客的消費(fèi)數(shù)量。想象一下其實(shí)也無(wú)外乎下面的幾種方案:
    1、該店的店員很厲害,能記住每位顧客的消費(fèi)數(shù)量,只要顧客一走進(jìn)咖啡店,店員就知道該怎么對(duì)待了。這種做法就是協(xié)議本身支持狀態(tài)。
    2、發(fā)給顧客一張卡片,上面記錄著消費(fèi)的數(shù)量,一般還有個(gè)有效期限。每次消費(fèi)時(shí),如果顧客出示這張卡片,則此次消費(fèi)就會(huì)與以前或以后的消費(fèi)相聯(lián)系起來(lái)。這種做法就是在客戶(hù)端保持狀態(tài)。
    3、發(fā)給顧客一張會(huì)員卡,除了卡號(hào)之外什么信息也不紀(jì)錄,每次消費(fèi)時(shí),如果顧客出示該卡片,則店員在店里的紀(jì)錄本上找到這個(gè)卡號(hào)對(duì)應(yīng)的紀(jì)錄添加一些消費(fèi)信息。這種做法就是在服務(wù)器端保持狀態(tài)。
    第一種情況暫時(shí)不考慮.看第二種情況,卡片無(wú)疑就是cookie了,所有的數(shù)據(jù)如果都存在卡片上是不安全的,也是容易遺失的(卡片被修改了?卡片遺失了?這都是有可能的).所以才用了第三種情況.客戶(hù)除了個(gè)會(huì)員號(hào)再什么信息也沒(méi)有,這是最安全的,但這個(gè)會(huì)員號(hào)必須是客戶(hù)自己知道的!也就是cookie中必須存儲(chǔ)的.
    這樣解釋我今天中午遇到的情況就不驚訝了.

    無(wú)cookie的解決辦法是利用URL重寫(xiě)技術(shù),就是把sessionid的數(shù)據(jù)保存在url后面http://onewww.net/a.asp?sessionid=111
    在.net中,可以用Web.config配置
    就是把cookieless="false"改為:cookieless="true"就可以了
    還有一種方法是利用表單隱藏字段技術(shù),就是加個(gè)input type='hide'的元素.這中技術(shù)也在.Net中大量使用,尤其是.Net中的控件.個(gè)人很不喜歡這種技術(shù),因?yàn)榧哟罅肆髁?數(shù)據(jù)都是加密的.體積成倍增加)

    默認(rèn)情況下session是存在inetinfo.exe進(jìn)程中的
    .Net中session是可以存在sql server中的,很強(qiáng)

    PS:
    今天看到firefox2支持客戶(hù)端Session保存,我理解的是不利用cookie了,直接就支持.其實(shí)IE很早就支持了!只是沒(méi)有普及.應(yīng)該是個(gè)很好的技術(shù).以前看過(guò),忘記在哪看的了,以后找到再補(bǔ)充上來(lái).現(xiàn)在firefox也支持了,估計(jì)又要掀起一次小小的革命了.哈哈.個(gè)人觀點(diǎn)
    firefox 2支持session的英文資料 我是看不明白地..
    http://www.whatwg.org/specs/web-apps/current-work/#scs-client-side

    真是一篇好文,呵呵,收藏了.
    posted on 2008-06-19 09:23 henry1451 閱讀(1565) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Jsp,Js,Ajax,Html技術(shù)
    主站蜘蛛池模板: 久久香蕉国产线看免费| 亚洲精品综合一二三区在线| 亚洲成a人片在线观| 免费一区二区三区| 国产精品亚洲αv天堂无码| 午夜免费国产体验区免费的| 深夜国产福利99亚洲视频| 在线观看亚洲免费| 免费日本黄色网址| 免费VA在线观看无码| 亚洲国产精品一区二区三区久久| 亚洲欧美黑人猛交群| 免费日本黄色网址| 久久午夜伦鲁片免费无码| 亚洲美女自拍视频| 日韩国产免费一区二区三区| 亚洲免费观看在线视频| 中文字幕av无码无卡免费| ww亚洲ww在线观看国产| 国产三级在线观看免费| 国内成人精品亚洲日本语音| 亚洲AV日韩精品久久久久久| 91九色视频无限观看免费| 亚洲1区1区3区4区产品乱码芒果 | 四虎在线最新永久免费| 菠萝菠萝蜜在线免费视频| 一本久久a久久精品亚洲| 久久久精品免费视频| 九月丁香婷婷亚洲综合色| 久久青草精品38国产免费| 日韩色日韩视频亚洲网站| 国产亚洲精品成人AA片新蒲金| 国产在线a免费观看| 美女视频黄a视频全免费网站色窝| 国产精品国产亚洲区艳妇糸列短篇| 亚洲电影唐人社一区二区| 日本v片免费一区二区三区| 五月天国产成人AV免费观看| 亚洲高清有码中文字| 亚洲一级Av无码毛片久久精品| 成人最新午夜免费视频|