• 技术文章 >Java >java教程

    jsp/servlet会话是什么

    (*-*)浩(*-*)浩2019-05-24 13:52:52原创966
    客户端打开与服务器的连接,发出请求直到服务器响应客户端请求的全过程称之为会话 。

    推荐课程:Java教程

    浏览器与服务器之间的通信是通过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)。重定向和转发

    通过<input type="hidden" name="">进行信息的传递 。通过表单形式提交到服务器,但是本身不显示。

    比如第二个表单中获取第一个表单中的内容,并以隐藏域( 文本框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中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:jsp java
    上一篇:jsp中的iframe什么意思 下一篇:jsp怎么调用java方法
    线上培训班

    相关文章推荐

    • jsp属于前端还是后端• jsp与servlet有什么区别• jsp和javascript的区别是什么• jsp是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网