session和cookie的最深刻理解 - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- session和cookie的最深刻理解 (http://www.webasp.net/article/8/7927.htm) |
| -- 作者:未知 -- 發佈日期: 2003-12-01 |
| 先說session
對SESSION的爭論好像一直沒有停止過,不過么麼能理解SESSION的人應該占90以上。 但還是講講,別嫌老~ 有一些人讚成用SESSION,有一些人不贊成。但這個問題到底要怎麼說。不妨聽聽我的看法 如果有錯誤請不要朝丟東西,金條和硬幣除外。 有些人應該知道我是做江湖程序的,而江湖程序做看中的就是效率,但這裡不談設計,而 從一些比較實際的角度看SESSION。 首先要先說SESSION是幹什麼的,SESSION是可以存儲針對與某一個用戶的IE以及通過其當 前窗口打開的任何窗口具有針對性的用戶信息存儲機制。為什麼要這樣說。看下邊 先研究SESSION是如何啟動的,當打開IE以後瀏覽網站後會發出一個指令請求SESSIONID以 及對各個類型數據的下載許可,如圖片,聲音以及FLASH。 數據實際傳輸內容:IE到服務器 GET / HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Accept-Language0: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Host: www.jh521.com Connection: Keep-Alive 服務器會返回一個沒有被使用的SESSIONID讓IE使用,當時IE就對返回SESSIONID做存儲 並同時返回相關頁面的下載數據,如下:服務器到IE HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Sun, 30 Nov 2003 16:41:51 GMT Content-Length: 21174..Content-Type: text/html Set-Cookie: ASPSESSIONIDCACBBBRT=IBOMFONAOJFEEBHBPIENJFFC; path=/ Cache-control: private 然後就是頁面HTML代碼 此時這個IE程序(不是客戶機)的SESSIONID就為IBOMFONAOJFEEBHBPIENJFFC 而當IE在訪問任何這個站點的ASP程序的時候,就會把IBOMFONAOJFEEBHBPIENJFFC發送 給服務器,服務器就會知道IBOMFONAOJFEEBHBPIENJFFC是表示你 而在服務器上設置SESSION("name")="name" 完全可以看成是 SESSION("IBOMFONAOJFEEBHBPIENJFFC")("name")="name" 或者 SESSION(SESSIONID)("name")="name" 這樣,SESSION就區分開用戶了。 而當服務器反饋這個ID的時候會看這個ID有沒有被使用。如果有在換一個 反正不會讓你重複,如果想模擬某人的SESSION的ID來進行欺騙是可以的。不過要獲取到 對方IE傳輸信號,並且在保證當時這個SESSIONID沒有被取消的情況下才可能實施。 不過要是我有那時間直接通過POST信號找他NAME和PASS了。我可不費這個勁 想必一些人明白了了SESSIONID到底是如何工作的 那麼就在看看COOKIE,有人說SESSIONID就是COOKIE,按照技術上來講他們不屬於同類 但是屬於一種工作模式,用戶和服務器傳輸私有數據 當我設置COOKIE的時候,服務器會反饋給IE一個指令。IE通過這個網絡指令生成COOKIE並 存放,在特定的時候會取得這個這個信息如在訪問這個站點並且COOKID有效的時候。 那麼為什麼要用COOKIE而不用SESSION呢 看下區別 有效時間以及存儲方式 傳輸內容 COOKIE 可設置並在本地保留 明碼信息 SESSION 在IE不關閉並服務器不超時 只有SESSIONID 當如果想讓用戶下次登入網站不需要輸入用戶名或者密碼的時候就只能用COOKIE, 因為他可以保留相當長的時間(在COOKIE記錄被刪除或者失效日期之前) 而SESSION就不可以,他不會保留太長時間,而且IE在關閉後就自動清除了SESSIONID記錄 在下次登入的時候會請求新的SESSIONID 而服務器想通過用戶個人變量校驗用戶的狀態的時候,就不能用COOKIE 如果用設置用戶權限是USER。而IE訪問的時候就把USER的明碼傳輸到服務器。 那麼如果我通過一定手段,比如直接修改COOKIE記錄,把USER修改成ADMIN呢~~ 就麻煩了。 但存儲用戶名和密碼或者網站的配色方案這樣的信息,用COOKIE是最好的 好,有點累了,在說說這個東西 Request.ServerVariables("HTTP_REFERER") 我想有一些人通過這個Request.ServerVariables("HTTP_REFERER") 來進行一些關鍵性限制,特別是對付遠程提交以及非法侵入。 那麼我就要提醒下服務器取得的HTTP_REFERER信息完全是IE傳輸給服務器的,可以模擬 而且難度不大,用不到半個小時就可以用VB做出一個針對HTTP_REFERER入侵程序。 (可惜我原先那他沒干正經事情,做WEB遊戲掛機程序來的) |
| webasp.net |