HttpSession具体解释

时间:2022-09-02 11:20:37

session的机制



http是无状态的协议,客户每次读取web页面时,server都打开新的会话,并且server也不会自己主动维护客户的上下文信息,那么要怎么才干实现会话跟踪呢?session就是一种保存上下文信息的机制,它是针对每个用户的,变量的值保存在server端,通过SessionID来区分不同的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出返回给clientCookie保存。



保存session id的几种方式



A.保存session id的方式能够採用cookie,这样在交互过程中浏览器能够自己主动的依照规则把这个标识发送给server。

B.因为cookie可以被人为的禁止,必须有其他的机制以便在cookie被禁止时仍然可以把session id传递回server,常常採用的一种技术叫做URL重写,就是把session id附加在URL路径的后面,附加的方式也有两种,一种是作为URL路径的附加信息,还有一种是作为查询字符串附加在URL后面。网络在整个交互过程中始终保持状态,就必须在每一个client可能请求的路径后面都包括这个session id。

C.还有一种技术叫做表单隐藏字段。就是server会自己主动改动表单,加入一个隐藏字段,以便在表单提交时可以把session id传递回server。



session何时被删除



session在下列情况下被删除:

A.程序调用HttpSession.invalidate()

B.距离上一次收到client发送的session id时间间隔超过了session的最大有效时间

C.server进程被停止



再次注意关闭浏览器仅仅会使存储在client浏览器内存中的session cookie失效,不会使server端的session对象失效。



URL重写有什么缺点



对全部的URL使用URL重写,包含超链接,form的action,和重定向的URL。每一个引用你的网站的URL,以及那些返回给用户的URL(即使通过间接手段,比方server重定向中的Location字段)都要加入额外的信息。

这意味着在你的网站上不能有不论什么静态的HTML页面(至少静态页面中不能有不论什么链接到网站动态页面的链接)。因此,每一个页面都必须使用servlet或JSP动态生成。即使全部的页面都动态生成,假设用户离开了会话并通过书签或链接再次回来,会话的信息都会丢失,由于存储下来的链接含有错误的标识信息-该URL后面的SESSION ID已经过期了。



使用隐藏的表单域有什么缺点



仅当每一个页面都是有表单提交而动态生成时,才干使用这样的方法。单击常规的<A HREF..>超文本链接并不产生表单提交,因此隐藏的表单域仅仅能用于一系列特定的操作中,比方在线商店的结账过程。



怎样将信息与会话关联起来



setAttribute会替换不论什么之前设定的值;假设想要在不提供不论什么取代的情况下移除某个值,则应使用removeAttribute。这种方法会触发全部实现了HttpSessionBindingListener接口的值的valueUnbound方法。



会话属性的类型有什么限制吗



一般会话属性的类型仅仅要是Object就能够了。除了null或基本类型,如int,double,boolean。

假设要使用基本类型的值作为属性,必须将其转换为对应的封装类对象



使用isNew来推断用户是否为新旧用户的错误做法



public boolean isNew()方法假设会话尚未和客户程序(浏览器)发生不论什么联系,则这种方法返回true,这通常是由于会话是新建的,不是由输入的客户请求所引起的。

但假设isNew返回false,仅仅只是是说明他之前以前訪问该Web应用,并不代表他们曾訪问过我们的servlet或JSP页面。

由于session是与用户相关的,在用户之前訪问的每个页面都有可能创建了会话。因此isNew为false仅仅能说用户之前訪问过该Web应用,session能够是当前页面创建,也可能是由用户之前訪问过的页面创建的。

正确的做法是推断某个session中是否存在某个特定的key且其value是否正确



是否仅仅要关闭浏览器,session就消失了



程序一般都是在用户做log off的时候发个指令去删除session,然而浏览器从来不会主动在关闭之前通知server它将要被关闭,因此server根本不会有机会知道浏览器已经关闭。server会一直保留这个会话对象直到它处于非活动状态超过设定的间隔为止。

之所以会有这样的错误的认识,是由于大部分session机制都使用会话cookie来保存session id,而关闭浏览器后这个session id就消失了,再次连接到server时也就无法找到原来的session。

假设server设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求报头,把原来的session id发送到server,则再次打开浏览器仍然可以找到原来的session。

恰恰是因为关闭浏览器不会导致session被删除,迫使server为session设置了一个失效时间,当距离客户上一次使用session的时间超过了这个失效时间时,server就能够觉得client已经停止了活动,才会把session删除以节省存储空间。

由此我们能够得出例如以下结论:

关闭浏览器,仅仅会是浏览器端内存里的session cookie消失,但不会使保存在server端的session对象消失,相同也不会使已经保存到硬盘上的持久化cookie消失。



怎样使用会话显示每一个客户的訪问次数



因为客户的訪问次数是一个整型的变量,但session的属性类型中不能使用int,double,boolean等基本类型的变量,所以我们要用到这些基本类型的封装类型对象作为session对象中属性的值

但像Integer是一种不可改动(Immutable)的数据结构:构建后就不能更改。这意味着每一个请求都必须创建新的Integer对象,之后使用setAttribute来取代之前存在的老的属性的值。比如:

HttpSession session = request.getSession();

SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”);

if (value= =null){

value = new SomeImmutableClass(…); // 新创建一个不可更改对象

}else{

value = new SomeImmutableClass(calculatedFrom(value)); // 对value又一次计算后创建新的对象

}

session.setAttribute(“someIdentifier”,value); // 使用新创建的对象覆盖原来的老的对象



怎样使用会话累计用户的数据



使用可变的数据结构,比方数组、List、Map或含有可写字段的应用程序专有的数据结构。通过这样的方式,除非首次分配对象,否则不须要调用setAttribute。比如



HttpSession session = request.getSession();

SomeMutableClass value = (SomeMutableClass)session.getAttribute(“someIdentifier”);

if(value = = null){

value = new SomeMutableClass(…);

session.setAttribute(“someIdentifier”,value);

}else{

value.updateInternalAttribute(…); // 假设已经存在该对象则更新其属性而不需又一次设置属性

}

HttpSession具体解释的更多相关文章

  1. springmvc 注解 配置文件解释

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  2. Java路径操作具体解释

    1.基本概念的理解 绝对路径:绝对路径就是你的主页上的文件或文件夹在硬盘上真正的路径.(URL和物理路径)比如: C:\xyz\test.txt 代表了test.txt文件的绝对路径.http://w ...

  3. struts&period;xml在Action配置具体解释

    在博客上我已经基本上解释struts.xml基本配置.配置过程最为基本的是action的动态配置. 一.Action的创建方法 1)实现Action接口 2)继承ActionSupport类,覆写当中 ...

  4. webscoket实战之利用httpsession定向推送

    webscoket实战之利用httpsession定向推送 开发框架 springboot 场景 在利用websocket主动推送信息给客户端的过程中,经常会遇到一个普遍需求,就是推送的消息要定向推送 ...

  5. Java中Httpsession是如何实现的&quest;

    HTTP协议(http://www.w3.org/Protocols/)是“一次性单向”协议. 服务端不能主动连接客户端,只能被动等待并答复客户端请求.客户端连接服务端,发出一个HTTP Reques ...

  6. Java进阶&lpar;十五&rpar;Java中设置session的详细解释

    Java中设置session的详细解释 简单通俗的讲session就是象一个临时的容器,用来存放临时的东西.从你登陆开始就保存在session里,当然你可以自己设置它的有效时间和页面,举个简单的例子: ...

  7. python locust 性能测试:HttpSession

    官网解释:用于在请求之间执行Web请求和保留(会话)cookie的类(以便能够登录和退出网站):记录每个请求,以便locust可以显示统计信息: from locust import TaskSet, ...

  8. WebSocket获取httpSession空指针异常的解决办法

    小坑:使用requestListner解决不了这个问题! 如何获取HttpSession 在使用webSocket实现p2p或者一对多聊天功能的时候我们经常会有这样的需求:webSocket服务端需要 ...

  9. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

随机推荐

  1. HBase笔记--filter的使用

    HBASE过滤器介绍: 所有的过滤器都在服务端生效,叫做谓语下推(predicate push down),这样可以保证被过滤掉的数据不会被传送到客户端. 注意:        基于字符串的比较器,如 ...

  2. UVA 12563 Jin Ge Jin Qu hao

    dp-背包 开始用普通dp写了一发发现没法确定最大时间... 后来看到大牛机智的写法,嗯...dp表示当前状态能否成立:然后从条件最好的状态开始遍历,直到这个状态成立然后退出遍历. 具体的看代码吧.. ...

  3. 如何在Eclipse中配置Tomcat&lpar;免安装版&rpar;

    如何在Eclipse中配置Tomcat(免安装版) 2013-10-09 23:19wgelgrsh | 分类:JAVA相关 | 浏览642次 分享到:   2013-10-10 17:10提问者采纳 ...

  4. &quot&semi;Debugging not possible in single session mode&quot&semi;

    PLSQL  Developer在测试存储过程,遇到"Debugging not possible in single session mode" 解决办法: 点击菜单栏&quot ...

  5. OpenCV 闭合轮廓检测

    这个好像是骨头什么的,但是要求轮廓闭合,于是对图片进行一下膨胀操作,再次检测轮廓就好了. // A closed contour.cpp : 定义控制台应用程序的入口点. // #include &q ...

  6. jieba库词频统计练习

    在sypder上运行jieba库的代码: import matplotlib.pyplot as pltfracs = [2,2,1,1,1]labels = 'houqin', 'jiemian', ...

  7. 如何使用AB PLC仿真软件Studio 5000 Logix Emulate

    前言:在学习PLC编程或程序开发过程中,如果身边没有实体PLC,又想验证程序逻辑,这时,仿真软件是不错的选择.针对AB PLC的仿真软件Studio 5000 Logix Emulate,有的同学说: ...

  8. 微信小程序之封装http请求

    下面将封装http请求服务部分的服务以及引用部分 // 本服务用于封装请求 // 返回的是一个promisepromise var sendRrquest = function (url, metho ...

  9. 睡前小dp-poj2096-概率dp

    http://poj.org/problem?id=2096 有n种分类,s种子系统,相互独立.每天发现一个bug等概率的属于n种分类和s种子系统. 要使发现的bug完全覆盖n种分类,s种分类,求天数 ...

  10. ASP&period;Net MVC 中a标签的onclick时间和href同时存在时候的处理

    问题出现: 本次项目在用到下载文件.导出文件的时候,需要在下载.导出之前进行判断,最初使用方式一.二,没能解决问题 方式一:使用href直接跳转controller方法,以下载为例: public A ...