1、Session和Cookie最大的区别是在于Session变量的值是保存在服务器端的(在客户端和服务器端保持状态),Cookie变量的值是保存在客户端的(在客户端保持状态)。
2. 服务器上会保存每一个用户的Session,之间通过Session ID来作为唯一标识符。当客户端与服务器端进行通信请求创建一个新的Session时,服务器端会先检查这个请求里是否已经包含了Session ID:如果已经包含了,则证明已存在为此用户创建的Session,客户端会将之前的Session检索出来使用;如果不包含,则客户端会创建一个Session及其Session ID,并在此次请求返回时将此Session ID 返回给用户。
3. Cookie 分为 Session Cookie(会话性Cookie) 和 Persistent Cookie(持久性Cookie)。它们的主要区别是:Session Cookie不包含到期日期,其存储在内存中,不会写入磁盘,当浏览器关闭时,此Cookie将永久删除;Persistent Cookie包含到期日期,其一般存储在磁盘中,在指定的到期日期,Cookie将从磁盘中删除。从安全性上来说,显然Session Cookie的安全性更高。因为它只针对某一次会话存在,当会话结束,Session Cookie就会被删除。Persistent Cookie 通常是一段存储在本地的加密文本,可能会遭受到Cookie欺骗、跨站脚本攻击等。
4. 浏览器的关闭并不会导致Session失效,重启浏览器是本地操作,并不会影响到服务器的数据(Session)。然而大多数Session ID 都通过Cookie保存在本地。所以当浏览器重启时,Session Cookie被删除,客户端的sessionId被删除,因此客户端再次向服务器发送请求时就无法找到在服务器上相对应的Session了。由于在服务器上的Session不会被删除,所以服务器上的Session会设置会话失效时间,当上一次使用Session的时间间隔已经超过了此失效时间,服务器就认为客户端已经停止使用此Session,会将Session删除以节省存储空间。
5. 在多窗口的应用中,服务器一般会采取Session Cookie和Persistent Cookie结合的方式来保证用户端的登陆状态不会失效。在用户新开一个新窗口时,可以先把Session Cookie中的Session ID写入Persistent Cookie中,再通过新窗口读取,并发送通信请求。这样就可以实现跨窗口的Session Tracking(会话追踪)。
小问题:同一种浏览器两个窗口是一个session吗???
首先要明确一点:打开2个浏览器 窗口,指的是打开2个浏览器、而打开n个页面,是打开n个标签。
然后:在不同的窗口里面 session 是不一样的、但是在不同的标签里面 session 是一样的。