JavaEE session机制

Http协议:

在讲session之前,必须说下Http协议,HTTP是一个client和server端请求和应答的标准(TCP)。由HTTPclient发起一个请求,建立一个到server指定port(默认是80port)的TCP连接。HTTPserver则在那个port监听client发送过来的请求。一旦收到请求,server(向client)发回一个状态行,比方"HTTP/1.1200 OK",和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其他一些信息。

也就是Http协议是无状态保持功能的,所以我们说下我们的session机制,就是为了保存相应浏览器的身份识别功能的。

Session技术:

    1,什么是session(会话)

      在server端维护用户状态的一种状态管理技术,事实上现过程:当浏览器发给你文server时,server会创建一个对象(称为session对象),

      该对象有一个唯一的id号(称为sessionId),然后,server在默认情况下,会使用cookie技术,将sessionId发送给浏览器,

      浏览器下次訪问server时,会将sessionId携带给server。server会根据该sessionId查找到相应的session对象(用户的状态能够写到session对象上)。

    2,怎样创建session对象?

      1),HttpSessionsession =request.getSession();//server会创建一个符合HttpSesion接口标准定义的session对象

      2),HttpSessionsession = request.getSession(boolean flag);

        当flag为true:

        浏览器发送请求给server,server会查看请求中有无sessionId,若没有,则创建一个session对象;

        若有,还要看要查找的那个session对象是否仍然存在(由于某种原因,比方超时限制,server会删掉session对象),有存在则返回;若不存在则创建一个新的对象

        当flag为false:

        浏览器发送请求给server,server会查看请求中有无sessionId,若没有,返回一个null;

        若有,还要看要查找的那个session对象是否仍然存在(由于某种原因,比方超时限制,server会删掉session对象),有存在则返回;若不存在则返回一个null

      3),HttpSessionsession =request.getSession();  等价于 HttpSessionsession = request.getSession(true);

    3,session中的经常用法

      session.setAttribute(Stringname,Object obj);

      Objectsession.getAttribute(String name);//一般要得到后转型

      session.removeAttribute(Stringname);//去除某个属性

      Stringsession.getId();

    4,设置sesion的最大不活动时间

      session.setMaxInactiveInerval(intseconds);

      session.invalidate();//使之马上失效

    5,使用配置文件,设置session的失效时间,

      方式一,设置整个server的配置失效时间,这个方式会影响到该server上的全部应用。Tomcat默认30分钟

       TOMCAT_HOME/conf/web.xml

       <session-config>

        <session-timeout>30</session-timeout>

       </session-config>

      方式二,针对某个特定的应用进行配置失效时间

       仅仅须要改动web.xml

       <session-config>

        <session-timeout>30</session-timeout>

       </session-config>

    6,样例:

     A,对要保护的页面进行session验证

      session的验证:

       1,在登录成功后,写入数据做一个session属性加入

         <%

          session.setAttribute("user",user);

         %>

       2,在要保护的页面加上session验证代码

         <%

          Objectobj = session.getAttribute("user");

          if(null== obj){

           response.sendRedirect("login.jsp");

          }

         %>

       3,为了安全起见(有些时候浏览器没关,session还是存在的),做一个安全退出

         HttpSessionsession = request.getSession();

         session.invalidate();//使之失效

         response.sendRedirect("login.jsp");

     B,购物车

       Product:产品

        idlong,

        modelString,

        picNameString,

        proDescString,

        pricedouble;

       CartItem:商品条目

        productProduct,

        quantityint;

       Cart:购物车

        itemsList<CartItem>,

        booleanadd(CartItem item),

        List<CartItem>list(),

        delete(longid),

        clear(),

        modify(longid, int quantity),

        doublecost();

    7,假设用户禁止了cookie,怎样实现session机制?(怎样实现sessionId的跟踪)

     使用URL重写机制:

       假设要訪问的web组件(jsp或者servelt),须要session机制的支持(用到session的对象),

       可是浏览器端却禁止了cookie技术,那么不能直接在地址栏输入要訪问的web组件的定制,而要用server生成的地址,

       而应该使用server生成的一个地址(该地址后会携带sessionId)

     怎样生成一个携带sessionId的地址?

       A。对于链接、表单提交,使用response.encodeURL("url地址")。

          比方:<ahref="<%=response.encodeURL("url")%>"></a>

       B。对于重定向,使用response.encodeRedirectURL("url地址")。

          比方:response.sendRedirect(response.encodeRedirectURL("url地址") );

       C。对于转发,无须考虑,由于在server内部的跳转,无须与浏览器交互,不予考虑

Session机制原理图:

原文出自:http://blog.sina.com.cn/s/blog_6c21f6480100vllc.html

JavaEE session机制的更多相关文章

  1. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  2. Cookie/Session机制详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  3. redis+cookies实现session机制(解决 手机浏览器不自动回传cookies导致session不可用问题)

    昨天在手机端测试自己的项目遇到如下情况. 1.在手机上(苹果qq浏览器),登陆时存在session中的图片验证码结果,一直获取不到,考虑是cookies的问题.但是其他网站有貌似可以正常使用cooki ...

  4. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  5. PHP中的SESSION机制

    [转] php中cookie和session是我们常用的两个变量了,一个是用户客户端的,一个用在服务器的但他们的区别与工作原理怎么样,下面我们一起来看看cookie和session机制原理吧.   c ...

  6. session机制详解以及session的相关应用

    session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...

  7. Cookie/Session机制

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  8. [转]Cookie/Session机制详解

    原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用 ...

  9. 转:理解Cookie和Session机制

    原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...

随机推荐

  1. 七牛用户如何将视频转码成普清高清来适应不同的手机端或者web端

    Qiniu 七牛问题解答 非常多人会用到七牛视频转码问题,要将视频转码成适用于各种终端的视频,也有的用户对转码服务的码率,帧率,分辨率等理解不多.不知道该怎样设置这些參数.以下我给大家科普一下. 问题 ...

  2. Delphi - XP扫雷外挂制作

    技术交流,DH讲解. 本来之前就在写这个文章,还写了War3挂的教程,后来因为一些事就没有弄了.现在过年在家又没有事就继续把这个写完吧.哈哈.不要以为写个挂很容易,要想写个挂肯定要了解游戏呀.我们现在 ...

  3. Linux下select函数的使用

    一.Select 函数详细介绍 Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect. accept.recv ...

  4. Theano学习笔记(二)——逻辑回归函数解析

    有了前面的准备,能够用Theano实现一个逻辑回归程序.逻辑回归是典型的有监督学习. 为了形象.这里我们如果分类任务是区分人与狗的照片. 首先是生成随机数对象 importnumpy importth ...

  5. WebService 之 WSDL文件 解说

    恩,我想说的是,是不是常常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说依照上面的进行适配,嘿嘿,这个时候,要是你曾经没有开发过,肯定会傻眼,那假设 ...

  6. Custom draw 和 Owner draw 的区别

    "Custom Draw" is a feature shared by all of Microsoft's common controls, which allows you ...

  7. 几个前端博客 good

    http://www.cnblogs.com/JustinYoung/archive/2011/02/24/fresh-free-html-templates-2010.html http://www ...

  8. 让Delphi XE2程序支持UAC

    在win7下,开发的程序有的时候莫名其妙就不能正常工作了,其实都是因为权限不够,要想能够正常运行,就需要获得管理员权限,这就需要处理UAC.具体方法如下: 一,制作“uac.manifest”文件.新 ...

  9. U3D——Unity3D的脚本-script入门

     Unity3D的基本操作非常easy就能掌握了,接下来就是游戏系统的核心部分:脚本. 什么是Script(脚本)?简而言之,就是使用代码来运行一系列动作命令的特殊文本,它须要编译器来从新解读.U ...

  10. 《生活在Linux中》之:使用Bash就是使用Emacs

    定义bash Emacs模式下的快捷键请参考: Readline-在BASH下自定义键盘热键 未完待续...