经典面试题-描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理

实现sessionid的保存和传输。是cookie,将http的请求变得有状态。session的实现是web服务器的事情,不过很显然默认是利用会话cookie,也就是存放在浏览器内存里的那种cookie来实现的,在cookie里只是存放了SessionID,然后在服务器上建立了一张表,对应客户端的SessionID。这张表是存放在服务器上的进程中的,也就是服务器的内存里,也就是Application里。当客户端请求服务器的时候,如果服务器发现这是一个新的请求,就会分配给他一个SessionID,也就是在浏览器写入一个sessionID的cookie。你可以试一下,在你请求过一次服务器之后,在服务器遍历客户端所有的cookie,就会发现这个叫做SessionID的cookie。

但是,这只是session实现sessionid状态记录的一种方法,如果客户端浏览器禁用了cookie,很多网站还是可以正常登录,还是可以正确识别浏览器的身份,这就是通过url重写的方式,每次交互都携带sessionid的信息。

还有一种方式,就是表单重写,有些服务器会在表单中增加隐藏域,来回传递sessionid。

所以在了解了这个session的原理之后我们可以自己来造一个自己的session,可以使用cookie,也可以使用url重写方式,也可以使用表单方式。

session的结束问题

还有知道了session的原理就会明白一个session会话如何结束,除非服务器端可以清除一个session会话,客户端是没有能力清除session的,关闭浏览器的时候并不能够结束当前的会话(忽略浏览器关闭事件),在不依赖于cookie的session中最明显,你可以记下你的sessionID那串字符串,关闭浏览器,打开,把sessionID自己替换,你就可以恢复刚才的会话了。所谓的20分钟session超时,是服务器每隔20分钟对于不活动的session清除而已。

还有要指出的是依赖于cookie的session是存放在浏览器内存中的,所以一个浏览器的进程就会产生一个session,可以通过任务管理器查看进程,对于IE来说,只有双击桌面上的浏览器快捷方式才能新启动一个进程的,当然其他类似启动iexplorer.exe的行为也可以

到这里你会发现在依赖于cookie的session中,是需要浏览器的支持的!

对于js的ajax请求,确切的说是xmlhttp这个组件发送的http请求,虽然是你使用js的代码自己制造的,但是依然是借助于浏览器发送的,所以可以获得session。

你可能感兴趣的:(经典面试题)