首页  >  文章  >  Java  >  jsp/servlet会话是什么

jsp/servlet会话是什么

(*-*)浩
(*-*)浩原创
2019-05-15 14:44:472654浏览

客户端打开与服务器的连接,发出请求直到服务器响应客户端请求的全过程称之为会话 。 

推荐课程:Java教程

jsp/servlet会话是什么

浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以实现这种要求 。 

Cookie

服务器在响应请求时可以将一些数据以"键-值"对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的存有session ID的Cookie通过请求信息带到服务器端,网络服务器通过识别唯一的session ID来代表每个客户端,从而识别这个客户端接下来的请求。

 Cookie不是内置对象,需要自己创建Cookie的实例。是服务器往客户端写的一段文本信息,该信息是可以修改的,所以一般情况cookie会存储一些非敏感信息,当客户端再次请求服务器的时候,会将Cookie以请求头的方式发送到服务器,这个时候服务器就能区分是谁在访问了。

用于会话跟踪的Cookie叫做会话Cookie。Servlet规范中会话跟踪的cookie名字必须是JSESSIONID,保存在浏览器的内存中。

Cookie可以用于保持用户的会话状态,但Cookie信息保存在客户端,存在较大的安全隐患,且一般浏览器对Cookie的数目及数据大小有严格的限制。在Web应用中,一般情况下通过HttpSession对象保持会话状态

Cookie cookie = new Cookie("键", "值");       //创建cookie
cookie.setMaxAge(60*60*24);                 //设置cookie的有效期
cookie.setPath("/");                        //设置cookie的有效范围(路径)
response.addCookie(cookie);                 //将cookie写入到客户端

Session

Session 是存放在服务器端的,更加安全。每一个用户都有一个不同的session,各个用户之间是不能共享的。 

Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效 。

Session技术则是服务端的解决方案,它是通过服务器来保持状态的。在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。

session.setAttribute(String name,Object obj);       //往session中存放内容(通过键和值的形式)
session.getAtrribute(String name);                  //通过键从session中获取内容
session.removeAttribute(String name);               //把存储在session中的对象移除
session.invalidate();                               //销毁session

隐藏表单域

隐藏表单域是将会话ID添加到HTML的隐藏表单中(类型为hidden的input)。重定向和转发

通过进行信息的传递 。通过表单形式提交到服务器,但是本身不显示。 

比如第二个表单中获取第一个表单中的内容,并以隐藏域( 文本框type为 hidden) 的方式接受第一个表单中的内容,再次传递到第三个表单中。通俗点说请求的顺序是这样的:表单一 - - > 表单二 - - >表单三,但是表单三需要用到表单一提交的内容,所以就会需要表单二作为过渡,把表单一的内容以隐藏域的形式保存,然后再传递到表单三中。

重写URL

把会话ID编码在URL中。 例:counter.jjsp;jsessionnid=be8d697876787876befdbde898789098980这样,即使浏览器不支持cookie,也能够实现会话跟踪。

对于URL复写,服务器从请求的URI中提取出会话ID,并把该请求与相应的会话关联起来,然后在访问会话数据的时候,JSP页面所进行的处理方式就和使用cookie跟踪会话id时所使用的方式完全相同。所以sesssion的实现要依靠cookie或URL复写技术。

String sessionId = request.getRequestedSessionId();     //获得sessionId

通过response对象的encodeURL(StringURL)实现URL地值重写:

<a href="<%=response.encodeURL("index.jsp") %>"> 
    index页面</a>

该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会调用encodeURL()方法之后会自动将用户Session的id重写到URL中。重写后的输出可能是这样的:

a href="index.jsp?jsessionid=0E0C61100AEB06DE6A95EB1CD1DA8158">index页面</a>

HttpServletResponse接口定义了两个用于URL重写的方法: 

encodeURL方法,用于超链接和form表单的action属性中设置的URL进行重写 

encodeRedirectURL 方法 用于对传递给HttpServletResponse.sendRedirect()方法的URL进行重写 

他们根据请求消息中是否含有Cookie头字段来决定是否进行url重写。把URL作为参数传递给这两个方法,他们就能完成url重写,在url后面添加 jsessionid参数及其值。可以关闭浏览器的Cookie,然后,进行实验,在网页源文件中查看URL后面是否有jsessionid参数及其值。

以上是jsp/servlet会话是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn