HTTP的session, cookie和connection

Session: server端記載的用戶會話清單, 存在server記憶體, 可以視為server端的cookie, 以session-id辨認用戶端。session的expired time由web app設定的timeout決定, 一旦用戶存取server就重新計時, 若用戶閒置超過timeout時間就會把該用戶從會話清單移除掉 [現實對照: 某一天的聊天對象]

Cookie: client端的屬性資訊, 例如session cookie就記載著用戶的session-id。cookie可以存成file, 也可以設定cookie expired的期限。若是session cookie就無法存成file, 關閉瀏覽器cookie就消毀;若有HttpOnly flag的cookie只能透過Http(s)存取, Javascript不能存取。[現實對照: 某個聊天對象是誰, 及他的嗜好興趣]

Connection: 指server與client溝通時建立的TCP socket連線。當瀏覽器連到某個web server時, 瀏覽器會帶Connection: keep-alive的表頭, 告訴server端保持連線, 此時server就會開著一條與該client溝通的socket連線, 直到關閉瀏覽器或client端發出"Connection: close"的表頭, 抑或是閒置太久由server端斷開便會中止連線。(注意: curl的Connection表頭永遠是close, 就算加上-H “Connection: keep-alive"也沒用;telnet的Connection表頭預設是keep-alive, 但是可以透過更改Connection: close來斷開連線) [現實對照: 某一次的通話]