问题如下:
关于session的。
为什么使用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这个东西不错,其实如果真的某个session故障了,如果不是关键应用,让系统rollback 然后重新开始,也是一个很有效并且可以接受的方案。
对不起,系统忙,请稍后重试,然后就链接到另一个机器了,继续提供服务了。