session
session copied to clipboard
轻量的分布式会话组件(A Lightweight Distributed Session Component)
Session
轻量的分布式会话组件(A Lightweight Distribute Session Component)
-
包引入(maven dependency):
dependency> <groupId>me.hao0</groupId> <artifactId>session-redis</artifactId> <version>1.0.0</version> </dependency> -
依赖包,注意引入项目时是否需要排除(exclude if necessary):
dependency> <groupId>me.hao0</groupId> <artifactId>session-api</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> -
Servlet-Filter机制(Mechanism)

-
SessionFilter如何工作(How SessionFilter Works):

-
使用(Usage):
-
在web.xml中配置Filter(Config Filter in web.xml):
filter> <filter-name>RedisSessionFilter</filter-name> <filter-class>me.hao0.session.redis.RedisSessionFilter</filter-class> <init-param> <!-- cookie中的sessionId名称 --> <!-- the session id in cookie --> <param-name>sessionCookieName</param-name> <param-value>scn</param-value> </init-param> <init-param> <!-- session过期时间(秒) --> <!-- session expired time in seconds --> <param-name>maxInactiveInterval</param-name> <param-value>1800</param-value> </init-param> <init-param> <!-- cookie上下文路径 --> <!-- cookie context path --> <param-name>cookieContextPath</param-name> <param-value>/</param-value> </init-param> <init-param> <!-- cookie域名 --> <!-- cookie domain --> <param-name>cookieDomain</param-name> <param-value>session.com</param-value> </init-param> <init-param> <!-- cookie保存时间(秒) --> <!-- cookie lifetime in seconds --> <param-name>cookieMaxAge</param-name> <param-value>1800</param-value> </init-param>
``` + 在**classpath**下配置**session.properties**(Config **session.properties** in **classpath**)RedisSessionFilter /* ```ruby # redis model: is sentinel or not, default is not sentinel # session.redis.mode= # session serialize class, default is JsonSerializer # session.serializer= # redis host session.redis.host=localhost # redis port session.redis.port=6379 # redis max connections, default is 5 # session.redis.pool.max.total=5 # redis max idle connections, default is 2 # session.redis.pool.max.idle=2 # redis session id prefix session.redis.prefix=sid ``` -
-
Demo:
-
配置**/etc/hosts**(config /etc/hosts):
27.0.0.1 demo1.session.com demo2.session.com -
假如使用nginx作web代理,配置server(config server if use nginx):
pstream session_server { server localhost:10000; server localhost:10001; erver { listen 80; server_name demo1.session.com demo2.session.com; location / { proxy_pass http://session_server; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; } -
运行session-demo(run session-demo):
demo1.session.com vn clean jetty:run -Dmaven.test.skip -Djetty.port=10000 demo2.session.com vn clean jetty:run -Dmaven.test.skip -Djetty.port=10001 -
测试(Test):
-
用户首页(user index):
ttp://demo1.session.com/users/index ttp://demo2.session.com/users/index -
用户登录(user login):
ttp://demo1.session.com/users/login?username=admin&passwd=admin ttp://demo2.session.com/users/login?username=admin&passwd=admin -
用户登出(user logout):
ttp://demo1.session.com/users/logout ttp://demo2.session.com/users/logout
-
-
-
使用其它的存储,如Memcache(Use other storage, Memcache, etc):
- 继承SessionFilter(inherit SessionFilter);
- 实现SessionManager(implement SessionManager)。
-
相关文档(References):
-
历史版本(Release History):
-
1.0.0:
- 基本功能实现(basic implementation)。
-
-
你是好人:
-
倘若你钱多人傻花不完,小弟乐意效劳😊,掏出你的微信神器做回好人吧:
-
倘若你还不够尽兴,继续掏出你的支付宝神器,疯狂扫吧:
-