美文网首页
2018-06-23(session)

2018-06-23(session)

作者: acebear | 来源:发表于2018-06-23 23:17 被阅读0次

    HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息。

    有三种方法来维持客户端与服务器的会话:

    1、Cookies

    网络服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求。

    但是很多时候浏览器并不一定支持cookie。

    2、隐藏表单域

    一个网络服务器可以发送一个隐藏的HTML表单域和一个唯一的session ID,当表单被提交时,指定的名称和值将会自动包含在GET或POST数据中。每当浏览器发送一个请求,session_id的值就可以用来保存不同浏览器的轨迹。

    但点击<a href>标签中的超链接时不会产生表单提交事件,因此隐藏表单域也不支持通用会话跟踪。

    3、重写URL

    可以在每个URL后面添加一些额外的数据来区分会话,服务器能够根据这些数据来关联session标识符。

    但缺点是必须为每个URL动态指定session ID,就算这是个简单的HTML页面。

    session对象:除了以上几种方法外,servlet提供的HttpSession接口来识别一个用户,该接口提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

    Servlet 容器使用这个接口来创建一个 HTTP 客户端和 HTTP 服务器之间的 session 会话。会话持续一个指定的时间段,跨多个连接或页面请求。

    在向客户端发送任何文档内容之前需要调用 request.getSession(),通过调用 HttpServletRequest 的公共方法 getSession() 来获取 HttpSession 对象:HttpSession session = request.getSession();

    HttpSession 对象中可用的几个重要的方法:

    1、public Object getAttribute(String name)    该方法返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null。

    2、public Enumeration getAttributeNames()    该方法返回 String 对象的枚举,String 对象包含所有绑定到该 session 会话的对象的名称。

    3、public long getCreationTime()    该方法返回该 session 会话被创建的时间,自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。

    4、public String getId()    该方法返回一个包含分配给该 session 会话的唯一标识符的字符串。

    5、public long getLastAccessedTime()    该方法返回客户端最后一次发送与该 session 会话相关的请求的时间自格林尼治标准时间 1970 年 1 月 1 日午夜算起,以毫秒为单位。

    6、public int getMaxInactiveInterval()    该方法返回 Servlet 容器在客户端访问时保持 session 会话打开的最大时间间隔,以秒为单位。

    7、public void invalidate()    该方法指示该 session 会话无效,并解除绑定到它上面的任何对象。

    8、public boolean isNew(    如果客户端还不知道该 session 会话,或者如果客户选择不参入该 session 会话,则该方法返回 true。

    9、public void removeAttribute(String name)    该方法将从该 session 会话移除指定名称的对象。

    10、public void setAttribute(String name, Object value)     该方法使用指定的名称绑定一个对象到该 session 会话。

    11、public void setMaxInactiveInterval(int interval)    该方法在 Servlet 容器指示该 session 会话无效之前,指定客户端请求之间的时间,以秒为单位。

    删除Session数据:

    完成了一个用户的 session 会话数据,有以下几种选择:

    1、移除一个特定的属性:可以调用 public void removeAttribute(String name) 方法来删除与特定的键相关联的值。 to delete the value associated with a particular key.

    2、删除整个 session 会话:可以调用 public void invalidate() 方法来丢弃整个 session 会话。

    3、设置 session 会话过期时间:可以调用 public void setMaxInactiveInterval(int interval) 方法来单独设置 session 会话超时。

    4、注销用户:如果使用的是支持 servlet 2.4 的服务器,可以调用 logout 来注销 Web 服务器的客户端,并把属于所有用户的所有 session 会话设置为无效。

    5、web.xml 配置:如果您使用的是 Tomcat,除了上述方法,还可以在 web.xml 文件中配置 session 会话超时,如下:

    <session-config>

    <session-timeout>15</session-timeout>

    </session-config>

    超时以分钟为单位,Tomcat中的默认的超时时间是30分钟。Servlet中的getMaxInactiveInterval( ) 方法以秒为单位返回超时时间。如果在web.xml中配置的是15分钟,则getMaxInactiveInterval( ) 方法将会返回900。

    相关文章

      网友评论

          本文标题:2018-06-23(session)

          本文链接:https://www.haomeiwen.com/subject/kzmdyftx.html