vivian blog

session,

session是什么

http是一个无状态协议,所以server和client不会一直保持连线状态,也不会有双方状态的即时更新,所以sever并不知道client的状态(像是是否已经登入),由此引入了session,代表服务器与浏览器的一次会话过程,其被存储在服务器端。

session的原理

Session 的机制就像是你去飲料店下了單以後,得到号码牌,然後你走开几步,店員就忘了你是誰。所以,如果你想去取飲料,你就得靠這張號碼牌,去跟店員領,店員會跟據這號碼牌,認定你是顧客、是否點過餐、知道你點了什麼東西,然後可以接著給你屬於你的飲料。

理解之后,回到http上就是一样,在网络领域中,有两种方法让client取得号码牌,一个是用cookie,另一个是直接输出并嵌入页面当中的方法,即直接把号码背下来。
拿号码牌去sever拿资料,亦分为两种方法,cookie和运用标准的query string /post body

事实上,在最原始的session设计当中,开发者是将资料存储在sever,或是usb或数据库当中,每当顾客来买东西,店员就输入你的号码来得知你是否点过餐。
这种方案在小型网站是完全行得通的,只是在现在超大流量的网络服务来看,直接将资料存储在sever,就意味着大容量的数据库,以及存放和共享资料的技术,加之兼顾效能以及方便维护而言,这就是相当大型的问题
而cookie-based-session就提出将资料暂时存放在cookie当中,让client自己存放,其原理通常是使用 Query String 或 POST body 等方法,把資料往 Server 傳之後,在 Server 端將 Client 上傳的資料存在 Session 之中,简单地说,

你点什么饮料,统统直接写在号码牌上,sever就可以直接看你的号码牌,而无须发大量的是将去建立大规模的server来处理session

只是cookie只有4k容量的限制,所以网站有时候会采用cookie-based-session和服务器端session并行的策略。

session传值

利用session机制来储存资料,让不同页面之间可以传递资料。之后的连接或开启其他页面是,因为你拿的号码牌是同一个,所以在不同页面当中,仍然可以读到迁移所储存在session的状态。

session会在浏览器关闭后消失嘛

不会的,浏览器关闭后其所创建的sessionid就会随之消失。而seesion只会在其expire到期时,会是直接在服务器端强制清除,才会使session消失。