Session or Cookie?是否需要用Tomcat等Web容器的Session
2015-05-03 00:00
645 查看
Cookie是HTTP协议标准下的存储用户信息的工具,浏览器把用户信息存放到本地的文本文件中。
Session是基于Cookie实现的。
2011年4月,武汉群硕面试的时候(实习生),面试官也问过这个问题。
当时只知道Session是基于Cookie的,但是没有想到“不使用Tomcat等Web容器的Session,只使用Cookie也可以实现自己的Session,完成会话管理,而且据说性能更好。”
以前的做法:
使用HttpRequestSession保存用户信息,非常方便。
配置一个登录拦截器,从Session中获得当前用户的信息。
如果需要登录,但Session中没有用户信息,就强制跳转到登录页;否则,正常执行。
如果不需要登录,无论Session是否有用户信息,正常执行。
好处:使用自带的Session,编程更方便,不需要额外处理。
坏处:性能不好,据说Session占居的内存会非常多。
之前做的Web项目,用户都不大,没有考虑过这个问题。
为了实现“保持登录”这个功能,要用到Cookie,需要做一下特殊处理。
Tomcat的Session可以存放到Redis中,保证服务器重启的情况下,已经登录的用户仍然保持登录。
把Java的Session存到Redis,这个还没有实现过。
创业的做法:
创业做ITFriend的时候,我们是把Node.js的Session数据存到Redis中。
现在的做法:
不使用HttpRequestSession,使用Cookie,在用户端保存key,用户信息缓存到Redis中。每次请求来的时候,根据Cookie信息,得到key,根据缓存,判断用户是否登录过。
配置一个登录拦截器,默认需要登录。使用@LoginNeedless注解,就不需要登录。无论是否登录,都可以把用户的信息放到线程上下文ThreadLocal<User>中。
在实际过程中,发现一个问题,ThreadLocal<User>是线程局部变量,但是Tomcat的线程是“线程池” 实现的,两个不同用户的ThreadLocal可能是同一个,
因此在请求和开始的时候,清空用户信息: LoginUtil.setCurrentUser(null);
防止不同用户的数据互相干扰。
理论上的性能排序:
Cookie+Redis >= 容器Session+Redis > 容器Session
原文首发:http://fansunion.cn/article/detail/56.html
Session是基于Cookie实现的。
2011年4月,武汉群硕面试的时候(实习生),面试官也问过这个问题。
当时只知道Session是基于Cookie的,但是没有想到“不使用Tomcat等Web容器的Session,只使用Cookie也可以实现自己的Session,完成会话管理,而且据说性能更好。”
以前的做法:
使用HttpRequestSession保存用户信息,非常方便。
配置一个登录拦截器,从Session中获得当前用户的信息。
如果需要登录,但Session中没有用户信息,就强制跳转到登录页;否则,正常执行。
如果不需要登录,无论Session是否有用户信息,正常执行。
好处:使用自带的Session,编程更方便,不需要额外处理。
坏处:性能不好,据说Session占居的内存会非常多。
之前做的Web项目,用户都不大,没有考虑过这个问题。
为了实现“保持登录”这个功能,要用到Cookie,需要做一下特殊处理。
Tomcat的Session可以存放到Redis中,保证服务器重启的情况下,已经登录的用户仍然保持登录。
把Java的Session存到Redis,这个还没有实现过。
创业的做法:
创业做ITFriend的时候,我们是把Node.js的Session数据存到Redis中。
现在的做法:
不使用HttpRequestSession,使用Cookie,在用户端保存key,用户信息缓存到Redis中。每次请求来的时候,根据Cookie信息,得到key,根据缓存,判断用户是否登录过。
配置一个登录拦截器,默认需要登录。使用@LoginNeedless注解,就不需要登录。无论是否登录,都可以把用户的信息放到线程上下文ThreadLocal<User>中。
在实际过程中,发现一个问题,ThreadLocal<User>是线程局部变量,但是Tomcat的线程是“线程池” 实现的,两个不同用户的ThreadLocal可能是同一个,
因此在请求和开始的时候,清空用户信息: LoginUtil.setCurrentUser(null);
防止不同用户的数据互相干扰。
理论上的性能排序:
Cookie+Redis >= 容器Session+Redis > 容器Session
原文首发:http://fansunion.cn/article/detail/56.html
相关文章推荐
- Session or Cookie?是否需要用Tomcat等Web容器的Session
- Session or Cookie?是否需要用Tomcat等Web容器的Session
- Session or Cookie?是否需要用Tomcat等Web容器的Session
- Session or Cookie?是否有必要使用Tomcat等一下Web集装箱Session
- 不同tomcat实例cookie(session)保持-可用于负载均衡
- PHP - Manual手册 - CXLIX. Session 会话处理函数 - session.use_only_cookies指定是否在客户端仅仅使用 cookie 来存放会话 ID
- Tomcat中Session与cookie的深度探索
- tomcat使用cookies缓存的时候中文报错解决办法 java.lang.IllegalArgumentException: Control character in cookie value or attribute.
- Tomcat7.0 使用以前的jre的时候报错:javax.servlet.ServletContext.getSessionCookieConfig
- Session or cookie confusion
- 理清 Tomcat中Session和Cookie
- 如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
- 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
- tomcat 动态域名共享session和cookie
- Tomcat 7 可以修改 Session 默认的 Cookie 名 JSESSIONID 了
- Tomcat之Session和Cookie大揭密
- cookie和session可能需要知道的知识
- web测试你需要知道的HTTP(二)--cookie与session的实现
- Tomcat源码阅读之Cookie和Session
- tomcat多域名共享cookie,共享session以及修改sessionCookieName的解决方案