session 学习

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。
  当程式需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为session id,如果已包含一个session id则说明以前已为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个和此session相关联的session id。保存这个session id的方式能采用cookie,这样在交互过程中浏览器能自动的按照规则把这个标识发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID,而。比如weblogic对于web应用程式生成的cookie,JSESSIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764,他的名字就是JSESSIONID。这个session cookie是保存在浏览器的内存中的。

  “只要关闭浏览器,session就消失了”,这是一种很不严禁的说法。session是服务器创建的,要想删除session除非程序通知服务器删除一个session,否则服务器会一直保留。

然而浏览器是不会在关闭的时候通知服务器他将要关闭,因此服务器根本不会知道浏览器已关闭。之所以会有这种错觉,是因为大部分session机制都使用会话cookie来保存session id,

而关闭浏览器后这个cookie 是会销毁的所以这个session id就消失了,再次连接服务器时也就无法找到原来的session。

如果服务器设置的cookie被保存到硬盘上,或使用某种手段改写浏览器发出的HTTP请求头(URL重写),把原来的session id发送给服务器,则再次打开浏览器仍然能够找到原来的session。

session持久化:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" session="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%= session.getId() %>
    <%
        Cookie cookie = new Cookie("JSESSIONID", session.getId());
        cookie.setMaxAge(20);//session持久化 20秒当浏览器关闭20秒内这个session id依然存在
        response.addCookie(cookie);
    %>
</body>
</html>

URL重写:
  Web 服务器在返回Response的时候,检查页面中所有的URL,包括所有的连接,和HTML Form的Action属性,在这些URL后面加上“;jsessionid=XXX”。 
下一次,用户访问这个页面中的URL。jsessionid就会传回到Web Server。

 

设置session超时:

 关闭浏览器不会导致session被删除,迫使服务器为seesion设置了一个失效时间,当距离客户端上一次使用session的时间超过这个失效时间时,服务器就能认为客户端已停止了活动,才会把session删除以节省存储空间。一般我们会在WEB.xml中配置

<session-config>
     <session-timeout>30</session-timeout><!-- 30分钟-->
</session-config>

session的生命周期:

  1、session的创建时间

  一个常见的误解是以为session在有客户端访问时就被创建,事实是直到某web服务器调用HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的session对象的来历。由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭他,<%@ page  session="false"%>。注意这个属性只是禁用了

jsp中session这个隐含对象,我们依然可以显式的使用session

<%
        HttpSession session = request.getSession(true);
        out.println(session);
        out.print("<br>");

        //获取 Session 的最大时效, 默认为 30 分钟.
        out.print(session.getMaxInactiveInterval());
        session.invalidate();
    %>

   总结:session的创建时间是客户端第一次与wb服务器交互并且web服务器调用HttpServletRequest.getSession(true);

Session 对象的销毁:

①. 直接调用 HttpSession 的 invalidate()

②. HttpSession 超过过期时间.

  > 返回最大时效: getMaxInactiveInterval() 单位是秒  > 设置最大时效: setMaxInactiveInterval(int interval)

   > 可以在 web.xml 文件中配置 Session 的最大时效, 单位是分钟.

    <session-config>

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

    </session-config>

③. 卸载当前 WEB 应用.       注意: 关闭浏览器不会销毁 Session!

时间: 2024-10-10 07:54:10

session 学习的相关文章

Jetsever开源项目学习(三)Session学习

package org.menacheri.jetserver.app; import java.util.List; import org.menacheri.jetserver.communication.MessageSender; import org.menacheri.jetserver.communication.MessageSender.Fast; import org.menacheri.jetserver.communication.MessageSender.Reliab

cookie与session学习(一)

提出问题 HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的 即使 HTTP1.1 支持持续连接,但当用户有一段时间没有提交请求,连接也会关闭. 怎么才能实现网上商店中的购物车呢:某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息. 作为 web 服务器,必须能够采用一种机制来唯一地标识一个用户,同时记录该用户的状态 会话和会话状态 WEB应用中的会

session学习

四大作用域 作用域 通信对象 有效范围 page pageContext 当前页面有效 request request 一次请求周期:从http请求发起,到服务器处理结束,返回响应的整个过程(转发) session session 一个会话周期:从用户打开浏览器访问服务器开始,到用户关闭浏览器的整过程,可以有多个request application application 从启动应用到关闭应用的整个过程,可以有多个session 都有的方法 void setAttribute(String n

【JAVAWEB学习笔记】16

会话技术Cookie&Session 学习目标 案例一.记录用户的上次访问时间---cookie 案例二.实现验证码的校验----session 一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪     里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并   不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器    记住客户端状态(区分客户端) 2.会话技术 从打开一个浏览器访问某

web.py session

web.py session学习: import webfrom web import form urls = ( '/','Index', '/test','Test', '/login','Login', '/logout','Logout',) render = web.template.render(".") allowed = ( ('admin','123123'),) web.config.debug = Falseapp = web.application(urls,

【JAVAWEB学习笔记】16_session&amp;cookie

会话技术Cookie&Session 学习目标 案例一.记录用户的上次访问时间---cookie 案例二.实现验证码的校验----session 一.会话技术简介 1.存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪     里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并   不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话技术是帮助服务器    记住客户端状态(区分客户端) 2.会话技术 从打开一个浏览器访问某

php session的理解与使用

session学习参考链接:1.http://www.w3cschool.cn/php_sessions.html:2.http://php.net/manual/zh/book.session.php(此为中文翻译版本,建议查看英文原版) 另外,你应该看一下php.ini对session的配置,里面的每一项配置都有确切的含义和说明,深入学习session对于网站缓存机制的深刻理解.

JavaWeb之Cookie&amp;Session(六)

简介 现在每天整理笔记,第一是巩固知识,第二是把学过的变成自己的.虽然笔记内容很普通,但掌握能这些,变成自己的知识,也是挺不错的 学习技巧 Cookie和Session学习时,明白如何使用以及原理.剩下时间大量练习案例,增加对Cookie和Session的认识 Cookie对象 0. 会话管理 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话 会话过程中要解决的问题 每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产

04-session学习

package com.bjsxt.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.htt