简单来说,session 是数据存放在服务器的,而cookie 是数据存在在客户端浏览器的。
举个例子,客户在某一网页上登录并注册登录了,浏览器会保存客户的用户名和密码,在一定时间内,客户再次访问这个网站时,浏览器会自动输入用户名和密码,这就是cookie 的作用。cookie 是自带浏览器的功能。
再举个session 的例子:客户通过用户名密码访问了某个网站,此时,如果我再打开这个网页,你会发现是可以不用登录直接进入网页的。session 大多是后端人员的工作了。
那么session 的工作机制是什么呢。简单的说,每个服务器会有很多个客户端,不同的客户端会有不同的操作权限。那么客户端要如何通过不同的客户返回不同的数据呢?当客户端访问一个页面时,会向服务器发送一个请求时,服务器接收到请求后进行数据的处理将结果发送给客户端。返回的结果中会包含一个 session_id 的值,并将这个session_id 和它的user 绑在一起,而客户端 cookie 将保存这个session_id。所以当客户端再次请求时,会带上session_id,服务器根据session_id 将用户相应的数据返回给用户。
那么session 超时服务器又做了那些工作呢。 当用户登录超时了,服务器便会把带有session_id 的user 记录给删除,这时用户访问这个页面时,服务器找不到这个session_id 了,于是服务器便返回登录页面,当用户再次登录时会生成一个新的 session_id。同样的,用户自动退出时,服务器也是会删除 带有session_id的user 记录。
那么问题来了,有时session 超时,又有iframe,登录页会在iframe 里出现,而不是在整个窗口中弹出。解决办法,在登录页面上加上如下代码:
if(window !=top){
top.location.href=location.href;
}