为什么要session一致性
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你。
那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱后,接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密码吧,为了解决这个问题,session的方案就被提了出来,事实上它并不是什么新技术,而且也不能脱离http协议以及任何现有的web技术
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现
Session共享
–首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个时候就会出现取不到session数据的情况,于是session的共享就成了一个问题
Session一致性解决方案
– 1、session复制
– tomcat 本身带有复制session的功能。
– 2、共享session
– 需要专门管理session的软件,
– memcached 缓存服务,可以和tomcat整合,帮助tomcat共享管理session。内存型的数据库中(memcached、redis)
1、安装memcached 可以将这个缓存的sesison数据库 装在其他linux上 (非tomcat 为了避嫌 当然也可以装在一个中 也可以用另外一台服务器)
–1、安装libevent (yum就不需要安装)
–2、安装memcached
如果源配置了也可以用
yum –y install memcached
–3、启动memcached 运行在装有memcached的linux上
– memcached -d -m 128m -p 11211 -l 192.168.236.101 -u root -P /tmp/ 写装在哪台的IP地址
– -d:后台启动服务
– -m:缓存大小
– -p:端口
– -l:IP
– -P:服务器启动后的系统进程ID,存储的文件
– -u:服务器启动是以哪个用户名作为管理用户
2、修改其他机器的tomcat的session存储机制
1、/usr/tomcat7/conf 进入该目录
2、修改 vim context.xml 文件
3、–配置tomcat,每个tomcat里面的context.xml中加入
每台tomcat都需要配置好
3、配置jar包 文章后面有!
/usr/tomcat7/lib
有时候 可能session会变
1、首先 检查 tomcat的linux时间是否一样
2、检查tomcat的端口是否开放(或者直接关闭防火墙)
3、如果不行 再次重新配置以上操作
链接:https://pan.baidu.com/s/1rd9D9BXlEgx82ftkpP5Uxg
提取码:4xjs