|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
很多开发中涉及到用户的Session验证很保留的问题,这个问题比较有意思,总结了几种方案,只供参考。
为了满意足够大的应用,满意更多的客户,于是我们架设了N台Web服务器(N>=2),在多台Web服务器的情况下,我们会涉及到一个问题:用户登陆一台服务器以后,假如在跨越到另一台服务器的时候能够继承使用客户的Session? (以下描述方案只是针对Linux/Unix + Apache + Mysql + PHP的开发架构,当然,也可以扩展到其他平台。)
既然我们的问题已经摆在面前了,那么就要从技术角度去解决问题,给我们的客户更好的体验,总结了几个方案。 1. 写客户端Cookie的方法 当用户登陆成功以后,把网站域名、用户名、密码、token、session有效时间全部采用cookie的形式写入到客户端的cookie里面,假如用户从一台Web服务器跨越到另一台服务器的时候,我们的程序主动去检测客户端的cookie信息,进行判定,然后提供对应的服务,当然,假如cookie过期,或者无效,自然就不让用户继承服务了。当然,这种方式的弊端就不言而喻了,比如客户端禁用了cookie或者cookie被黑客窃取了呢? 2. 服务器之间Session数据同步的方法 假设Web服务器A是所有用户登陆的服务器,那么当用户验证登陆一下,session数据就会写到A服务器里,那么就可以自己写脚本或者守护进程来自动把session数据同步到其他Web服务器,那么当用户跳转到其他服务器的时候,那么session数据是一致的,自然就能够直接进行服务无须再次登陆了。缺点是,可能会速度慢,不稳定,假如是单向同步的话,登陆服务器出现问题,那么其他服务器也无法服务,当然也可以考虑双向同步的问题。 3. 利用NFS共享Session数据的方法 其实这个方案和下面的Mysql方案类似,只是存储方法不相同。大致就是有一台公共的NFS服务器(Network File Server)做共享服务器,所有的Web服务器登陆的时候把session数据写到这台服务器上,那么所有的session数据其实都是保存在这台NFS服务器上的,不论用户访问那太Web服务器,都要来这台服务器获取session数据,那么就能够实现共享session数据了。缺点是依靠性太强,假如NFS服务器down掉了,那么大家都无法工作了,当然,可以考虑多台NFS服务器同步的形式。
这个方法与NFS的方法类似,也是采用一台Mysql服务器做共享服务器,把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。缺点也是依靠性太强,Mysql无法工作了影响所有的Web服务器,当然,可以考虑多太Mysql数据库来共享session,使用同步Mysql数据的方法。 (Mysql同步我写过文章:http://blog.csdn.net/heiyeshuwu/archive/2005/10/31/520007.aspx) 5. 使用硬件设备 这个算是比较成熟的解决方案了,使用类似BIG-IP的负载设备来实现资源共享,那么就能够又稳定又合理的的共享Session了。目前很多门户网站采用这种方法。缺点很明显了,就是要收费了,硬件设备肯定需要购买成本的,不过对于专业或者大型应用来讲,是比较合理并且值得的。 以上这些只是我的个人愚见,没有经过试验,不保证其正确实在性,只是提供一种想法和参考。 返回类别: 教程 上一教程: 基于mysql的bbs设计(三) 下一教程: 一个oracle+PHP的查询的例子 您可以阅读与"多Web服务器之间共享Session的解决方案"相关的教程: · WINDOWS服务器安装多套PHP的另类解决方案 · 关于session的问题集锦解决方案 · 多php服务器实现多session并发运行 · 抛开Cookie使用SESSION-PHP中SESSION不能跨页传递问题的解决办法 · Windows环境下用Apache+PHP+MySql配置web服务器(菜鸟版) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |