关于session【网易163 的招聘题目(09年3月份)】

来源:互联网 发布:龙卷风优化软件官网 编辑:程序博客网 时间:2024/05/17 00:16

为什么使用session?使用session的根本原因是?
假如你使用的编程语言没有提供对session的支持,请你使用伪代码实现session机制。
请说明在你实现的机制中的安全因素。
假如要让你的机制实现多个web服务器前端(几多个机器),你要怎样实现?假如要让你的机制实现勿单点故障点(即一台机器当掉,不影响整个系统的运行),你要怎样实现?

1 为什么使用session?使用session的根本原因是?
session是为了维持客户端和服务器的会话,实际上就是通过这个机制,来判断当前访问的用户,是上次的那一个?也就是身份的辨认。


2 session的机制和实现
session一般通过cookie或者URL里的一个参数来实现。
第一次访问,产生一个唯一的session编号,然后发送给客户端,比如传递cookie,或者在url里面加上额外的参数
服务器在一个Map里保存此编号对应的信息
用户下一次访问,会再次传递这个编号,服务器在map里查找对应编号的信息是否存在,并进行后面的操作。

3 请说明在你实现的机制中的安全因素。
最关键的,就是sessionid 的生成算法,要足够的随机性,且长度足够长。 除非不得已,不要放在url里面传递

4 多个机器
这个是集群的基础,session至少要在另一个机器上保持同步,也就是这个机器的某个session的任何改变,都要在另一个机器上同时改变。 当然,如果所有机器都改变也行,不过网络流量大了一些毕竟2个机器同时出故障的几率已经很低了。

同步的机制可以用消息的方法进行,比如JMS/UDP等。如果同步有问题,则必须尝试,除非系统只剩下最后一台机器了。

5 故障恢复
因为有至少一个session的备份,所以故障后应立即让备份的机器接管,并继续服务,同时让另外一个机器再次作为备份。

系统如果有管理机,则可以实现简单的故障切换,否则只能每个session进行整个集群的备份了,这样任何一个机器接管都没有问题了。



另外,其实如果真的某个session故障了,如果不是关键应用,让系统rollback 然后重新开始,也是一个很有效并且可以接受的方案。