Nginx的session一致性问题——memcached缓存session共享
来源:互联网 发布:淘宝高仿鞋哪些店铺 编辑:程序博客网 时间:2024/05/22 22:18
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
yum -y install memcached
service memcached start
默认端口是11211
用telnet来试一下
yum -y install telnet
telnet localhost 11211
(set testname 0 0 5
12345
get testname
VALUE testname 0 5
12345
END)
------------------------------------------------------------------
安装memcached
1、安装libevent
2、安装memcached
3、启动memcached
memcached -d -m 128m -p 11211 -l 192.168.197.128 -u root -P
/temp/
-d:后台启动服务
-m:缓存大小
-p:端口
-l:IP
-P:服务器启动后的系统进程ID,存储的文件
-u:服务器启动是以哪个用户名作为管理用户
如果源配置了也可以用yum –y install memcached来安装,然后
配置session共享如下:
3、拷贝jar到tomcat的lib下,jar包见附件
4、修改Tomcat的server.xml文件
在tomcat的server.xml中配置jvmRoute
<Engine name="Catalina"defaultHost="localhost" jvmRoute="tomcat2"> 配置这个jvmRoute就可以知道产生session是哪台tomcat。
5、 每台tomecat分别区分,修改Tomcat index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat2 page</h1>
测试session共享
http://192.168.17.9:8080/
http://192.168.17.10:8080/
http://www.nginx1.com/
发现seesion不一致。5、配置tomcat,每个tomcat里面的context.xml中加入
<Manager className="de.javakaffee.web.msm.MemcachedBackupSession
Manager"
memcachedNodes="n1:192.168.17.9:11211"
sticky="false"
lockingMode="auto"
sessionBackupAsync="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
sessionBackupTimeout="1000"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.
KryoTranscoderFactory"/>
测试session共享
http://192.168.17.9:8080/
http://192.168.17.10:8080/
http://www.nginx1.com/
session一致了。
Session中数字累加,如果session是共享的则后台服务器tomcat会改变,数字会累加起来。
- Nginx的session一致性问题——memcached缓存session共享
- Nginx的session一致性问题
- Nginx的Session一致性
- nginx+tomcat+memcached session共享
- nginx+tomcat+memcached session共享
- 如何解决Nginx的session一致性问题
- session一致性memcached缓存数据库解决方案
- Nginx--Session共享问题
- Nginx+tomcat7+memcached的session共享問題
- Nginx + Memcached 实现Session共享的负载均衡
- Nginx + Memcached 实现Session共享的负载均衡
- Nginx + Memcached 实现Session共享的负载均衡
- memcached做session一致性
- Session一致性配置---memcached
- nginx + tomcat ,session共享的问题
- Windows7 + Nginx + Memcached + Tomcat 集群 session 共享
- Nginx + Memcached + Tomcat 集群 session 共享
- Nginx+Tomcat+Memcached集群Session共享
- 有关A^B(hdoj2035)
- 临界区锁 InitializeCriticalSection()
- 带有xavier初始化、dropout的多层神经网络
- Linux 系统管理之进程管理:目的、方法、命令
- GreenDao数据库
- Nginx的session一致性问题——memcached缓存session共享
- tiny6410的yaffs2文件系统的制作及其安装(1)
- 网页弹窗插件layer.js的使用
- 二叉排序树、平衡二叉树和红黑树
- arcgis for js 从入门到放弃二:dojo初识和arcgis的多种写法
- poj-3667 Hotel (线段树区间合并)
- Java你该知道的——类的基本知识
- 关联容器map用法实例
- Android shape