文章目录
- 一、什么是session
- 1.1 session的工作原理
- 1.2 cookie和session结合使用
- 1.3 Nginx+tomcat+memcached
- 二、session共享具体实现
一、什么是session
Session
是指会话控制,是保存在服务器上一种机制,当客户端访问服务器的时候,服务器会把信息以某种形式记录在服务器上,恰恰和Cookie相反。
Session经常用于会话过程中保证一定状态的信息,比如,用户在登录的时候,需要浏览web应用程序,并且存储是在页面重新被加载的时候,Session始终保持着任何时间都可以在设备上进行访问,但是随着用户的增多,Session的服务器内存也要不断加大,Session也会使用持久方法的限制。
session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。
1.1 session的工作原理
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你
当客户端向服务器发出请求的时候,服务器会保存一个session
,当session第一次被启用时,同时也是在客户端上形成一个cookie文件,首次使用session_start()函数,并且PHP去加载已经储存的session变量,并且通过函数去注册变量,当脚本执行完毕后,会自动保存到session库中,已方便下次使用。
1.2 cookie和session结合使用
web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:
1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式
1.3 Nginx+tomcat+memcached
使用nginx作为前端服务器来实现tomcat负载均衡及高可用,同时基于jsp的动态特征,我们将引入memcache来保持网页在连接过程中的session保持,利用memcached把多个tomcat的session集中管理 图解:
客户端请求时nginx通过负载调度算法将请求调度至某一后端服务器;tomcat 把会话通过组播的方式复制到集群各节点;所有节点共享会话;
当memcached有两个时可以采用交叉存储,可以更好的避免单点故障
二、session共享具体实现
在上一篇博客中,我们已经实现了会话保持,但是仍旧出现问题,当一台tomcat服务器宕机,另一台服务器无法获取数据,造成数据丢失,现在我们就来解决这个问题。
实验环境
主机(版本:ip) | 功用 |
虚拟机server1(rhel6.5:172.25.2.1) | lnmp环境主机+tomcat1服务器 |
虚拟机server2(rhel6.5:172.25.2.2) | tomcat2服务器 |
真机(rhel7.3:172.25.2.250) | 测试机 |
1、在server2上,安装memcahce,并开启服务。
[root@server2 ROOT]# yum install memcached -y
[root@server2 conf]# /etc/init.d/memcached start
2、将所需的安装包都放到server1和server2
的/usr/local/tomcat/lib
目录下
[root@server2 lib]# pwd
/usr/local/tomcat/lib
[root@server2 lib]# mv jar/* .
[root@server2 lib]# rm -fr jar
[root@server2 lib]# rm -fr memcached-session-manager-tc6-1.6.3.jar
3、编辑配置文件context.xml
- xml常用于数据存储和传输,文件后缀为 .xml
它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言 。
标记,指计算机所能理解的信息符号;
通过此种标记,计算机之间可以处理包含各种信息的文章等
1 、标记,指计算机所能理解的信息符号;
2、 通过此种标记,计算机之间可以处理包含各种信息的文章等。
XML设计用来传送及携带数据信息,不用来表现或展示数据,所以XML用途的焦点是它说明数据是什么,以及携带数据信息。而HTML语言则用来表现数据
[root@server1 lib]# cd /usr/local/tomcat/conf
[root@server1 conf]# vim context.xml
34 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
35 memcachedNodes="n1:172.25.2.1:11211,n2:172.25.2.2:11211"
36 failoverNodes="n1" (在172.25.2.2上"改为"n2")
37 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
38 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
在server2
上,
4、启动server1和server2
的tomcat和memcache
- 注意:如果tomcat之前是开启的,要先关闭,在开启。
[root@server1 conf]# cd /usr/local/tomcat/bin/
[root@server1 bin]# ./shutdown.sh
[root@server1 bin]# ./startup.sh
[root@server1 bin]# /etc/init.d/memcached status
[root@server1 conf]# /etc/init.d/memcached start
5、测试:访问测试页http://172.25.2.1/test.jsp
我们此时宕掉server2,再次访问测试页面,还可以看到数据
也可以监控日志,查看到数据:
cd /usr/local/tomcat/logs/
tail -f catalina.out