Session or Cookie?是否需要用Tomcat等Web容器的Session
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 or Cookie?是否需要用Tomcat等Web容器的Session的更多相关文章
- C# 登录 存Session ,cookie并且验证只能一个人登录以及清session并且Cache
string id = ConvertHelper.GetString(ds.Tables[0].Rows[0]["Uid"]);//用户ID string struserid = ...
- tomcat:web容器
Web容器和应用服务器除了你所说的request response之外还有很多其他重要的功能. 1. 多线程和并发处理,估计你写的socket程序支持不了几个并发访问吧 2. 安全性 3. 生命周期管 ...
- Session or Cookie?是否有必要使用Tomcat等一下Web集装箱Session
Cookie是HTTP协议标准下的存储用户信息的工具.浏览器把用户信息存放到本地的文本文件里. Session是基于Cookie实现的. 2011年4月,武汉群硕面试的时候(实习生).面试官也问过这个 ...
- Session、Cookie详解(2)
session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...
- Tomcat集群环境下session共享方案 通过memcached 方法实现
对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...
- Session和Cookie的用法及区别
1. Session.Cookie是什么 1.1 概念理解 要了解session和cookie是什么,先要了解以下几个概念. 1.1.1 无状态的HTTP协议 协议:是指计算机通信网络中两台计算机之间 ...
- PHP之session与cookie
1.session与cookie的关系 众所周知,session是存储在服务器端,cookie是存储在客户端,如果禁用了浏览器的cookie功能,很多时候(除非进行了特殊配置)服务器端就无法再读取se ...
- session和cookie
第一次听到cookie这个词的时候着实兴奋了一段时间,以为是小饼干呢~快喝一杯82年的java压压惊!哈哈~ 与cookie的第一次邂逅——清缓存和清cookie 刚毕业的时候上班,做二次开发,明明后 ...
- python运维开发(十九)----Django后台表单验证、session、cookie、model操作
内容目录: Django后台表单验证 CSRF加密传输 session.cookie model数据库操作 Django后台Form表单验证 Django中Form一般有2种功能: 1.用于做用户提交 ...
随机推荐
- 解决Firefox不信任StartSSL证书问题
从2016年的11月份开始,firefox \ chrome \ apple 等陆续不再信任 StartSSL 的证书,导致一些使用 StartSSL 的证书的网站访问遇到了麻烦, firefo ...
- resource-color 的引用
1.在xml文件中引用 android:textColor="@color/tv_top_title_color" 2.在代码中引用 1)在color.xml中定义 <?xm ...
- ELKstack 中文指南
https://www.elastic.co/downloads ELKstack 中文指南 .net Elasticsearch 学习入门笔记 一. es安装相关1.elasticsearch安 ...
- Elasticsearch之插件扩展
Elasticsearch之插件介绍及安装 Elasticsearch之head插件安装之后的浏览详解 Elasticsearch之kopf插件安装之后的浏览详解 Elasticsearch-2.4. ...
- 关于Webpack详述系列文章 (第四篇)
1. webpack基本概念 Entry:入口,Webpack 执行构建的第一步将从 Entry 开始,可抽象成输入.Module:模块,在 Webpack 里一切皆模块,一个模块对应着一个文件.We ...
- Python 之Numpy应用
NumPy 数据类型 numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型.下表列举了常用 NumPy ...
- .less为后缀的文件是什么
.less为后缀的文件是什么 一.总结 1.less是什么:LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS ...
- 前端切图|点击按钮div变色
<!DOCTYPE html> <html> <head> <title>点击按钮div变色.html</title> <meta c ...
- 【Android开发经验】我们要友好的告诉用户,程序要崩溃了
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 尽管我们的程序在正式上线之前,都会经过严格的測试.从而保证程序的健壮性和良好的用户体验,可是 ...
- 2 Java基础语法(keyword,标识符,凝视,常量,进制转换,变量,数据类型,数据类型转换)
1:keyword(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 所有小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这种高级记事本会对 ...