您的位置:首页 > 其它

关于Session的机制,实现方式和安全、单点故障问题

2009-03-07 17:58 281 查看
问题如下:

关于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 然后重新开始,也是一个很有效并且可以接受的方案。

对不起,系统忙,请稍后重试,然后就链接到另一个机器了,继续提供服务了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐