zoukankan      html  css  js  c++  java
  • 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中。保证server重新启动的情况下。已经登录的用户仍然保持登录。


       把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 

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    不能初始化ps2020,因为意外的遇到文件尾
    关于在云服务器上邮箱等功能无法正常的解决方法|phpcmsv9
    WAMP环境配置|apache24配置|php7配置|MySQL8配置
    SAP(ABAP) ABAP内部外部数据转换常用function
    移动平台对 META 标签的定义
    JavaScript/Jquery:Validform 验证表单的相关属性解释
    android开发问题 Failed to pull selection 菜鸟记录
    下载android sdk更新包离线安装解决方案
    android:inputType常用取值
    访问IIS元数据库失败解决方法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4799019.html
Copyright © 2011-2022 走看看