码迷,mamicode.com
首页 > Web开发 > 详细

黑马day05 session&重新设置JSESSIONID的生命周期

时间:2015-06-20 09:16:47      阅读:1896      评论:0      收藏:0      [点我收藏+]

标签:session

HttpSession:在服务器中,为浏览器创建独一无二的内存空间,在其中保存会话相关的信息。
4.1session作为域使用:他是j2ee中四大域对象之一,作用范围为整个会话。
4.2session的生命周期:在第一次调用reqeust.getSession()方法的时候,服务器会检查是已经有对应的session,如果没有就在内存中创建一个session并返回。
当一段时间内session没有被使用,一般为30分钟(此值可以在web.xml中配置<session-config>来配置,也可以使用TomcatManager进行配置),则服务器会销毁该session
当服务器强行关闭时,没有到期的session也会跟着销毁。
如果调用session提供的invalidate(),可以立即销毁session。
4.3session的原理:在服务器第一次调用request.getSession()方法的时候,会在内存中创建一个session对象,此对象具有一个独一无二的id值,此id值将会以cookie(JSESSIONID)的形式发送给浏览器,浏览器以后每次访问都会带着此cookie,服务器就利用此cookie区分浏览器找到对应的session空间。
4.4同一电脑内的不同浏览器使用同一session:JSESSIONID这个cookie默认是保存在浏览器内存中的,我们可以自己创建一个同名同path的Cookie,并设置maxage值,使其被保存在硬盘中,从而实现统一电脑中不同浏览器公用一个JSESSIONID从而使用同一个session。
4.5使禁用Cookie的浏览器也可以使用session:由于session是基于cookie运行的,如果禁用了cookie则会导致session不可用,我们可以将提供给这种浏览器的所有的URL进行重写,在所有的URL后跟上JSEESIONID,从而保证即使禁用了Cookie也能以URL的形式带回JSESSIONID,从而可以使用session。要重写所有的URL是一项成本很高的工作,一般我们不会这么做。
response. encodeRedirectURL(java.lang.String?url)如果此url是作为重定向操作的地址时使用此方法
response. encodeURL(java.lang.String?url)如果此url是普通连接则使用此方法
实验:利用session实现简单的购物功能,并提供对同一台电脑上的多个浏览器共享session的支持以及对禁用cookie浏览器的支持。
实验:使用Session完成用户登陆:当用户登录时在session中保存用户名,在其他页面就可以检查session中是否存在用户名,如果存在则认为已经登录过。注销的过程就是将session杀死的过程。

实验:使用session完成防止表单重复提交:当提供表单页面时,在表单中隐藏一个随机数值,并且将该随机数保存到session中,当表单提交时,检查提交上来到随机数与session中的随机数是否相同,如果相同则允许注册,注册后立即删除session中的随机数,如果不同则认为是表单的重复提交。

实验:实现购买与付账的功能

1.建立一个jsp实现到BuyServlet&PayServlet的超链接并带一个参数过来

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  
    
    <title></title>
    
	<meta http-equiv=" pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	
  </head>
  
  <body>
    <a href="<%=request.getContextPath()%>/servlet/BuyServlet?prod=冰箱">购买冰箱</a>
    <a href="<%=request.getContextPath()%>/servlet/BuyServlet?prod=空调">购买空调</a>
    <a href="<%=request.getContextPath()%>/servlet/PayServlet">付账</a>
  </body>
</html>
运行界面:

技术分享

2.在BuyServlet实现通过request.getParamer()的方式获取参数,然后将这个参数设置到session域对象中。下面的设置Cookie的代码是为了实现即时关闭了浏览器(默认是浏览器关闭,cookie死亡,即session丢失)也可以向浏览器写数据。从而关闭了浏览器也可以实现付款(知道是买的那个不会报NULl)

package cn.itheima.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class BuyServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//解决中文乱码问题get提交方式
		//1.获取参数
		String prod=request.getParameter("prod");
		prod = new String(prod.getBytes("iso8859-1"),"utf-8");
		//2.放到session域中
		HttpSession session = request.getSession();
		session.setAttribute("prod", prod);
		//3.重写Cookie重新设置JSESSIONID的声明周期
		Cookie c=new Cookie("JSESSIONID", session.getId());
		c.setPath(request.getContextPath());
		c.setMaxAge(1800);
		response.addCookie(c);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
点击购买
3.PayServlet实现付款功能

package cn.itheima.session;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PayServlet extends HttpServlet {


	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//1.获取session
		 String prod = (String) request.getSession().getAttribute("prod");
		 response.getWriter().write("您购买的是价值9999元的"+prod);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}


}
运行结果:

技术分享

大家可以尝试关闭浏览器....也能实现付款的功能!

黑马day05 session&重新设置JSESSIONID的生命周期

标签:session

原文地址:http://blog.csdn.net/u014010769/article/details/46564829

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!