会话技术Cookie和Session

Cookie   将数据存储到客户端

Cookie是一种会话技术,把会话数据放到浏览器中,相当于服务器办会员卡。

客户——服务器——客户   --》第二阶段服务器会返回一个Cookie保存到客户端

  1. 再次请求时所有Cookie会被发送到服务器
  2. 在请求头中,方便服务器对浏览器做出相应

set-cookie头字段

set-cookie:user(名)=itcast;Path=/;(值)(路径,默认当前浏览器)

  • setMaxAge(int second)   正数:持久化到硬盘上;负数:默认值-1存在浏览器内存(缓存)中;0:删除cookie
  • setPath(String url) 和getPath()  针对Cookie的Path属性,如果创建的某个Cookie对象没有设置属性,那么改Cookie只对当前访问路径所属文件及目录有效,如果让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将Path属性设置为"/"
  • setDomain(String pattern)  和getDomain()   针对domain属性,domain指定浏览器访问的域,值要用.开头,默认情况下domain为当前主机名,,浏览器在访问当前主机的资源时,都会将Cookie的消息返回服务器,domain属性不区分 大小写
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;Charset=utf-8");
		PrintWriter out = response.getWriter();
		Cookie cookie[] = request.getCookies();     //读取本地Cookie
		String ltime = null;                        
		String name="";
		for(int i=0;i<cookie.length&&cookie!=null;i++){
			if("qyc".equals(cookie[i].getName())){  //cookie的name
				name = cookie[i].getName();
				ltime = cookie[i].getValue();       //cookie的value设定的是最后访问时间
			}
		}
		if(ltime!=null){                            //判断时间为空的话,说明是第一次访问
			out.print(name+"上次登陆时间:"+ltime);
		}
		else {
			out.print(name+"第一次登陆");
		} 
		String time = new SimpleDateFormat().format(new Date());   //当前时间
		Cookie cookie2 = new Cookie("qyc", time);                  //设置cookie
		response.addCookie(cookie2);                               //添加cookie
		}

 

Session    将数据存储到服务器端

      原理:用户请求时,服务器先创建session出来后,会把session的id号,以cookie的形式回响应给客户端;这样只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带session的id过来了,就会使用服务器内存中与之对应的session为之服务。

      具体:在打开浏览器第一次请求该jsp的时候,服务器会自动(理解--服务器对应的代码)为其创建一个session,并赋予其一个session  ID,发送给客户端的浏览器。以后客户端接着请求本应用中其它资源的时候,会自动在请求头上添加:Cookie:JSESSIONID=客户端第一次拿到的session ID,这样服务器端在接到请求时候,就会收到session ID,并根据ID在浏览器的内存中找到之前创建的session对象,提供给请求使用
    服务器以cookie的方式返回给浏览器ID

思考①:浏览器关闭了,再次请求session一样吗?

答:不一样了,浏览器关闭了(相当于会话结束),默认session仅存活于当前的会话中(如果没有将session持久化,保存的jsessionid没了),相当于创建了一个新的session

思考②:服务器关闭了,再次请求session一样吗?

答:也不一样,会话结束,内存(缓存)释放了,但是虽然对象不一样了,但是session中存储的数据还是一样的

登陆

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		String pass = request.getParameter("password");
		System.out.println("读取表格成功");
		
		JavaBSession peo = new JavaBSession();
		peo.setName(name);
		peo.setPassword(pass);
		JavaBSession peo1 = new JavaBSession();
		Thelogin loginThelogin = new Thelogin();
		peo1 = loginThelogin.loginjc(peo);
		if(peo1!=null){
			System.out.println("登陆成功");
			request.getSession().setAttribute("qyc", peo1);
			request.getRequestDispatcher("index.jsp").forward(request, response);
		}
		else{
			System.out.println("登陆失败");
			request.getRequestDispatcher("MyLog.jsp").forward(request, response);
		}
	}

退出

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		request.getSession().removeAttribute("user");
		request.getRequestDispatcher("MyLog.jsp").forward(request, response);
		System.out.println("退出成功");
	}

index.jsp

<script>
  function tuichu(){
  	location.href = "ServletTuichu";
  }
  </script>
  <body>
    <button type="button" onclick="tuichu()">退出登陆</button>
  </body>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值