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

时间: 2024-10-12 07:20:59

Session or Cookie?是否需要用Tomcat等Web容器的Session的相关文章

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据: 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据. Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的

Django中的session和cookie

session和cookie 一. 概念理解 你可能有留意到当你浏览网页时,会有一些推送消息,大多数是你最近留意过的同类东西,比如你想买桌子,上淘宝搜了一下,结果连着几天会有各种各样的桌子的链接.这是因为 你浏览某个网页的时候,WEB 服务器会先送一些资料放在你的计算机上,类似于你打的文字,选的一些东西什么的,Cookie 会帮你都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内

Django之Session与Cookie

目录 一.cookie Cookie与的session由来 什么是Cookie Cookie的原理 查看Cookie cookie与session的作用 二.Django中操作Cookie 获取Cookie 设置Cookie 删除Cookie 三.Session Session的由来 设置session 获取session 四.设置session与cookie的超时时间 删除当前的会话数据并删除会话的Cookie(推荐) 五.Django中Session相关方法 Session流程解析 Sess

tomcat web容器工作原理

Tomcat的模块结构设计的相当好,而且其Web 容器的性能相当出色.JBoss直接就使用了Tomcat的web容器,WebLogic的早期版本也是使用了Tomcat的代码.Web容器的工作过程在下面的第二个参考文档中的文档已经说得相当清楚,我也就不再重复说了.如果不清楚调用过程,需要先看这个文档.这里分析一下Connector的处理过程.1. 一个简单的Web Server示例这个例子也是从网上找得,不知道原作者,也就不在参考资料中引用了.这个启动服务的主程序.public class Htt

Java面试14|Session与Cookie

1.在分布式环境,管理Session通常使用下面三种方式: (1)Session Replication 方式管理 (即session复制) 将一台机器上的Session数据广播复制到集群中其余机器上 使用场景:机器较少,网络流量较小 优点:实现简单.配置较少.当网络中有机器Down掉时不影响用户访问 缺点:广播式复制到其余机器有一定廷时,带来一定网络开销 tomcat自带的基于tcp广播技术的集群 (2)Session Sticky 方式管理 即粘性Session.当用户访问集群中某台机器后,

Session 与 Cookie

Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们本身只是HTTP中的一个配置项,在servlet规范中也只对应一个类而已. 理解 Cookie 通俗地说就是当一个用户通过 HTTP 协议访问一个服务器的时候,这个服务器会将一些 Key/Value 键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器的时候,数据又被完整地带回给服务器.W3C 在设计 Cookie 时实际上考虑的是为了记录用户在一段时间内访问 Web

Session,Cookie,jsessionid,Url重写

在一些投票之类的场合,我们往往因为公平的原则要求每人只能投一票,在一些WEB开发中也有类似的情况,这时候我们通常会使用COOKIE来实现,例如如下的代码: < % cookie[]cookies = request.getCookies(); if (cookies.lenght == 0 || cookies == null){ doStuffForNewbie(); //没有访问过 }else{ doStuffForReturnVisitor(); //已经访问过了 } % > 这是很浅显

tomcat session共享: 同tomcat不同项目之间的session共享

有时我们会遇到一个大点的项目,为了方便实现有些功能,我们会把项目拆成不同的独立web项目. 但我们在管理这些项目时,只有一个登陆口,然后在其他项目取session来实现身份的验证. 查看tomcat 关于 HTTP Connector中有个emptySessionPath 其解释如下: If set to true, all paths for session cookies will be set to /. This can be useful for portlet specificati

Tomcat 负责均衡及cluster session

一.nginx负载均衡tomcat 二.apache基于http负载均衡tomcat 三.apache基于ajp负载均衡tomcat 四.haproxy负载均衡tomcat 五.tomcat cluster session 一.nginx负载均衡tomcat 环境: IP:172.16.110.47 OS:CentOS7.3 Nginx:1.10.2 IP:172.16.110.25 OS:CentOS7.3 Tomcat:8.0.39 jdk:java-1.8.0-openjdk IP:172