`

12、会话管理

 
阅读更多

一、什么是会话?

 

  • 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
  • 会话过程中要解决的一些问题?
  • ----每个用户在使用浏览器与服务器进行会话的过程中,不可避免各自会产生一些数据,程序要想办法为每个用户保存这些数据。
  • ----例如:用户点击超链接通过一个servlet购买了一个商品,程序应该想办法保存用户购买的商品,以便于用户点结帐servlet时,结帐servlet可以得到用户购买的商品为用户结帐。
  • ----保存在request或servletContext中是肯定不行的

二、保存会话数据的两种技术

 

  1. Cookie
  2. Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了。

     
  3. Session
  4. Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务

三、API

 

  • javax.servlet.http.Cookie类用于创建一个Cookie,response接口中也定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie

 

/**
 * javax.servlet.http.Cookie
 * 创建一个 cookie,cookie 是 servlet 发送到 Web 浏览器的少量信息,这些信息由浏览器保存,然后发送回服务器。
 * cookie 的值可以唯一地标识客户端,因此 cookie 常用于会话管理。 
 * 一个 cookie 拥有一个名称、一个值和一些可选属性,比如注释、路径和域限定符、最大生存时间和版本号。
 * 一些 Web 浏览器在处理可选属性方面存在 bug,因此有节制地使用这些属性可提高 servlet 的互操作性。 
 * servlet 通过使用 HttpServletResponse#addCookie 方法将 cookie 发送到浏览器,该方法将字段添加到 HTTP 响应头,以便一次一个地将 cookie 发送到浏览器。
 * 浏览器应该支持每台 Web 服务器有 20 个 cookie,总共有 300 个 cookie,并且可能将每个 cookie 的大小限定为 4 KB。 
 * 浏览器通过向 HTTP 请求头添加字段将 cookie 返回给 servlet。
 * 可使用 HttpServletRequest#getCookies 方法从请求中获取 cookie。一些 cookie 可能有相同的名称,但却有不同的路径属性。
 * 浏览器通过向 HTTP 请求头添加字段将 cookie 返回给 servlet。可使用 HttpServletRequest#getCookies 方法从请求中获取 cookie。一些 cookie 可能有相同的名称,但却有不同的路径属性。
 * 此类支持版本 0(遵守 Netscape 协议)和版本 1(遵守 RFC 2109 协议)cookie 规范。默认情况下,cookie 是使用版本 0 创建的,以确保最佳互操作性。
 */
public class Cookie{
	//构造方法
	 public Cookie(String name, String value){}

	//常用方法
   String getComment() {}//获取注释信息
          
 	 String getDomain() {}
         
	 int getMaxAge() {}
	          
	 String getName() {}//没有setName的方法
	         
	 String getPath() {}
	         
	 boolean getSecure() {}
	          
	 String getValue() {}
	        
	 int getVersion() {}
	// -------------------------------------------
	 void setComment(String purpose) {}
	         
	 void setDomain(String pattern) {}
	        
	 void setMaxAge(int expiry) {}
	          
	 void setPath(String uri) {}
	          
	 void setSecure(boolean flag) {}
	          
	 void setValue(String newValue) {}
	          
	 void setVersion(int v) {}
}

 

 

public Cookie(String name,String value)
setValue与getValue方法 
setMaxAge与getMaxAge方法 ,单位是秒,如果不指定此属性则保存在浏览器内存中,如果设置了,则保存在浏览器缓存文件夹中,如果设置为0,则浏览器会删除同名cookie
setPath与getPath方法,控制浏览器什么时候带着此Cookie来访问,比如设置为/Day05则访问/Day05及其子路径时会带着cookie,如果没有设置path则,比如访问/Day05/servlet/Demo则默认为/servlet
setDomain与getDomain方法  .google.com 所有浏览器都拒绝接受第三方cookie,所以此方法基本上无用
getName方法 ,没有setName方法

 

 

 

/**
 * javax.servlet.http.HttpSession
 * 提供一种方式,跨多个页面请求或对 Web 站点的多次访问标识用户并存储有关该用户的信息。
 * servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。
 * 会话将保留指定的时间段,跨多个连接或来自用户的页面请求。
 * 一个会话通常对应于一个用户,该用户可能多次访问一个站点。服务器能够以多种方式维护会话,比如使用 cookie 或重写 URL。
 * servlet 应该能够处理客户端选择不加入会话的情况,比如故意关闭 cookie 时。
 */
public interface HttpSession{
	Object getAttribute(String name);
	void setAttribute(String name, Object value);
	void removeAttribute(String name);
	Enumeration getAttributeNames();
	
	long getCreationTime();//创建时间
	String getId();
	long getLastAccessedTime();
	int getMaxInactiveInterval();//得到最大不活跃间隔
	void setMaxInactiveInterval(int interval);
	
	ServletContext getServletContext();
	
	void invalidate();//让此Session作废
}

 

四、Cookie应用

 

  1. 显示用户上次访问时间,每次访问的时候将当前时间设置为cookie发给浏览器
  2. 显示用户上次浏览过的商品

     
  3. Cookie不接受中文,如果输入中文则设置不成功,不过可以进行URL编码,读取的时候进行解码就ok了
  4. String value = URLEncoder.encode("中文", "utf-8");
    cookie.setValue(value);//url编码并设置
    String value = c.getValue();
    value = URLDecoder.decode(date, “utf-8”);//url解码
     
  5. 注意,如果浏览器没有带Cookie过来则getCookies方法返回会是个null,要进行非空判断

五、Cookie细节

 

  1. 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)
  2. 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
  3. 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
  4. 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
  5. 注意,删除cookie时,path必须一致,否则不会删除(浏览器通过cookie的name+path来标识一个cookie)

六、session概述

 

  1. 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。
  2. session是一个域对象,作用范围为整个会话。
  3. Session和Cookie的主要区别在于:Cookie是把用户的数据写给用户的浏览器。Session技术把用户的数据写到用户独占的session中。
  4. session的生命周期
  5. Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象,如果服务器发现内存中没有该浏览器对应的session就会创建该session并返回,如果已经存在则直接返回已有的session。
  6. session并不会一直存在在内存中,经过一段时间如果无人使用session将会被销毁,一般这个时间为30分钟,可以在web.xml中配置<session-config>设置该时间值
  7. 调用session的invalidate()也可以销毁session
  8. 使用Session完成简单的购物功能

七、session实现原理

 

  • 服务器是如何实现一个session为一个用户浏览器服务的?
  • 如何实现多个IE浏览器共享同一session?(应用:关掉IE后,再开IE,上次购买的商品还在。)
  • 多个IE浏览器共享同一session
  • 在简单购物案例中,由于一个浏览器对应一个Session,所以当我们重新开一个浏览器时,是无法找到在上一个浏览器中购买的商品的,这在电子商务中是无法接受的,其实我们可以利用session的原理巧妙的使同一台机器内的多个浏览器共用一个session
  • 由于服务器识别浏览器是通过Jsessionid这个特殊的cookie进行的,我们可以手动设置该cookie的setMaxAge,使这个cookie被保存在硬盘中被多个浏览器公用,从而使同一台机器上的多个浏览器公用一个session。(注意设置cookie值时path也要相同)。

八、IE禁用Cookie后的session处理

 

  • 注意:即使禁止了Cookie,浏览器对localhost是不阻止的,要想试验就要用127.0.0.1进行
  • ie6对localhost开头的不起作用,ie8是可以起作用的
  • 解决方案:URL重写
  • response. encodeRedirectURL(java.lang.String url) 
    用于对sendRedirect方法后的url地址进行重写。
    response. encodeURL(java.lang.String url)
    用于对表单action和超链接的url地址进行重写 

九、session案例 

 

  • 使用Session完成用户登陆(注销、*注册)
  • 利用Session防止表单重复提交
  • 方式一:利用javascript
    <script type="text/javascript">
    	var isCommited = false;
    	function checkPost(){
    		if(!isCommited){
    			isCommited = true;
    			return true;
    		}else{
    			alert("不能重复提交");
    			return false;
    		}
    	}
    </script>
     
  • 缺点:当用户单击”刷新”,或单击”后退”再次提交表单,将导致表单重复提交
  • 方式二:
  • 表单页面由servlet程序生成,servlet为每次产生的表单页面分配一个唯一的随机标识号,并在FORM表单的一个隐藏字段中设置这个标识号,同时在当前用户的Session域中保存这个标识号。
  • 当用户提交FORM表单时,负责处理表单提交的serlvet得到表单提交的标识号,并与session中存储的标识号比较,如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
  • 在下列情况下,服务器程序将拒绝用户提交的表单请求:
  • ----存储Session域中的表单标识号与表单提交的标识号不同
  • ----当前用户的Session中不存在表单标识号
  • ----用户提交的表单数据中没有标识号字段

十、ServeltContext 、reqeust、session域的比较

 

  1. servletContext 的作用域是整个web应用,随着服务器启动而创建,如果应用被移除出主机或服务器关闭则销毁。
  2. request 的作用域是整个请求链,每一次请求都会创建一个request,当请求结束时request销毁。
  3. session 的作用于是整个会话,第一次调用reqeust.getSession时创建,当一段时间没有使用或服务器关闭或调用session.invalidate方法时销毁
  4. 什么时候用ServeltContext什么时候用reqeust什么时候用session?
  5. ----如果一个数据只是用来显示的话就用request域
  6. 如果一个数据除了用来显示以外我一会还要用,这时候用session
  7. 如果一个数据除了用来显示以外还要给别人用,这时候用ServletContext域
  • 大小: 16.5 KB
  • 大小: 26.8 KB
  • 大小: 28.4 KB
  • 大小: 22.8 KB
分享到:
评论

相关推荐

    hiro会话管理共12页.pdf.zip

    hiro会话管理共12页.pdf.zip

    JavaWeb12-文件上传.rar

    JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与include指令.rar JavaWeb05-购物车.rar JavaWeb06-Servlet.rar JavaWeb07-javaWeb模式.rar JavaWeb08-DBUtil.rar JavaWeb09-EL与JSTL.rar JavaWeb10-...

    智能会话「Smart Sessions」-crx插件

    - 通过定期浏览管理您的会话 - 活动会话没有限制 - 恢复单个标签或整个会话 - 标记你的会话 - 按会话名称,网站网址或标题进行搜索 - 导出和分享您的会话 - 用作书签管理器(关闭自动跟踪,不会保存更改) --...

    citrix 中文管理操作手册

    管理用户会话和服务器进程 31 使用 Access Management Console 创建报告 31 使用 Access Management Console 配置应用程序访问权限 32 使用 Access Management Console 创建跟踪日志 32 查看 Citrix 修补程序信息 32...

    BBS需求 管理 管理

    12.聊天室 注册用户可以在聊天室和论坛成员会话 聊天室的名称,人数限制等由管理员设置,聊天室可以由管理员创建,删除。 13.意见建议 用户可以给管理员联系,并欢迎提成各种意见和建议; 三 系统业务...

    web实验报告电子版.rar

    会话管理 6.JSP基本语法与页面指令 7.JSP隐含对象和作用域 8 .Web组件重用和javaBeans 9表达式语言的使用 10JSTl与标签文件 11Servelet事件监听 12Servelet过滤器的使用 13Web应用的安全性 14 javaweb期中实验

    异常终止会话导致系统被Hung

    问题和现象接到生产支持的同事报告:数据库反应非常慢,很多数据库操作无法完成,DB出在被hung住的状态。同时,他们通过OEM发现其中一个节点...由上图中问题出现的时间段,我取了9月1号13:00到9月2号12:00之间awrre

    GEN_Overall Architecture _NGOD 2.0_1

    1.2.12会话管理器(SM) 9 1.2.13 CA系统 10 1.2.14加密资源管理器 10 1.2.15加扰器 10 1.2.16网络资源管理器 11 1.2.17传输网络 11 1.2.18边缘资源管理器 11 1.2.19边缘设备 11 1.2.20网络管理系统 12 1.2.21数据...

    User_Auth:用户身份验证和会话管理API

    学生认证和会话管理 安装 克隆此仓库 git clone https://github.com/WahabDev12/User_Auth.git 转到仓库目录 cd User_Auth 安装并激活虚拟环境 pip install pipenv pipenv shell 用pip安装依赖项 pip install -r ...

    WindowsServer2016系统管理视频教程csdn.txt

    5-9文件资源管理器限制文件夹的大小和存放文件的类型12:54 5-10分布式文件系统(DFS)整合企业共享资源17:08 5-11配置DFS实现多服务器上的文件夹实时同步和访问负载均衡15:45 5-12配置DFS单向复制12:06 5-13DFS实现...

    人力资源管理软件(完全免费)

    人力资源管理软件功能介绍 本人力资源软件包含人事档案管理 本人力资源软件包含工资管理 本人力资源软件包含考勤管理 本人力资源软件包含绩效管理 本人力资源软件包含用户管理 本人力资源软件软件界面美观,...

    DBAtools for PL/SQL表空间管理器

    PL/SQL Developer是Oracle数据库当前最流行的开发工具之一,它在ORACLE数据库开发设计方面功能强大,使用方便,但是数据库管理方面一直比较欠缺。 DBATools For PL/SQL ...12.导出菜单 12.1.导出属性方式的XML文件

    进程管理经典软件MFC

     smss.exe 进程文件: smss or smss.exe 进程名称: Session Manager Subsystem 描述: 该进程为会话管理子系统用以初始化系统变量,MS-DOS驱动名称类似LPT1以及COM,调用Win32壳子系统和运行在Windows登陆过程。...

    MobaXterm12.rar

    MobaXterm是一款豪华、全功能的终端...1.会话管理 MobaXterm允许您启动远程会话。 您可以选择创建SSH,远程登录,Rlogin的,RDP,VNC,XDMCP,FTP,SFTP或串行会话。 你开始每个会话会自动保存,并在左侧边栏显示。

    Windows Server 2008系统管理视频教程csdn.txt

    3-5创建不属于管理员组的管理员06:54 3-6使用密码重设盘恢复密码06:16 3-7系统内置的组和自定义组04:05 3-8系统内置的组和自定义组04:05 3-9用户配置文件10:23 3-10管理缓存的网络凭据13:56 3-11缓存网络凭证带来的...

    12个最重要的J2EE最佳实践

    1、始终使用 MVC 框架。 2、在每一层都应用自动单元测试和测试管理。 3、按照规范来进行开发,而不是按照应用服务器来进行开发。... 12、为了提高程序员的工作效率,将 CMP 实体 bean 作为 O/R 映射的首选解决方案。

    plsql developer 中文使用手册 最新 7.0 plsql developer 使用手册(中文)

    4.6 包声明和 JAVA 会话声明.........................................23 4.7 查看结果集....................................................24 4.8 查看 DBMS_OUTPUT............................................

Global site tag (gtag.js) - Google Analytics