网站Session(会话)保持的常用手段

来源:互联网 发布:漂亮的登录界面源码 编辑:程序博客网 时间:2024/05/18 07:16

Session

这个可以说是最常用的, 基本的Web框架都提供。使用很简单,在Java中request.getSession即可获取。基本原理是:在用户访问网页的时候,下发一个Cookie,里面保存了一个SessionID的字符串,用户再次访问的时候,用SessionID到内存中对应的一个Map获取Session数据。

这个很明显的缺点就是只能单机使用,因为不同的服务之间Session数据是不共享的,这样在集群的时候就没办法用Session。其实也有变通的方法,比如在Tomcat中,可以使用不同的Session管理器,比如有一个用Memcached来存储Session的管理器,这样多台Tomcat都指向同一个Memcached,就实现了Session数据共享。单这样做部署就稍微麻烦了点,多依赖一个Memcached,而且如果不同语言写的Web服务的话,就会更麻烦。

Cookie+passport+缓存

根据用户登录信息,一般如ID、登录名、姓名等简单鉴别身份需要的信息,生成一个字符串,然后把这个字符串用一个私有的Key加密,将加密的结果Base64后写入Cookie下发,称为Passport。这样用户的Cookie,任何一台服务器就可以直接解密获得用户基本登录信息。如果有额外的信息需要读取,可以根据用户信息从持久层读取,如数据库或者缓存。

这个优点是比较灵活,不依赖任何第三方存储实现了用户身份在不同机器之间的共享,缺点是如果加密方法被窃取有一定的风险。

这是我常用的两种手段,有其他解决方案,欢迎留言。

0 0
原创粉丝点击