会话技术:session 和 cookie

一:什么是会话

        简单的理解:用户打开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。

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

1、Cookie:Cookie是客户端技术,程序把每个用户的数据以Cookie的形式写给用户鸽子的浏览器,当用户使用浏览器再去访问服务器中的web资源师,就会带着鸽子的数据区,这样,web资源处理的就是用户鸽子的数据量

2、Session:Session技术是服务器端激活素,利用这个技术,服务器在运行时为每个用户的浏览器创建一个其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把鸽子的数据放在各自的session中,当用户在去访问服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务。


三:Cookie详解

1、Cookie细节

a、一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)

b、一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie

c、浏览器一般允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB

d、如果创建了一个cookie,并将它发送到浏览器,默认情况下他是一个会话级别的cookie,用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将这个值设置为0就可以将这个cookie进行删除。

e、注意,删除cookie时,path必须一致,否则不会删除

范例:

package com.haizhu.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

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

public class ServletCookieDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		
		PrintWriter out = response.getWriter();
		out.print("您上次访问的事件是:");
		
		// 获得用户的时间Cookie
		Cookie cookies[] = request.getCookies();
		for(int i=0;cookies!=null&&i<cookies.length;i++){
			if(cookies[i].getName().equals("lastAccessTime")){
				long cookieValue = Long.parseLong(cookies[i].getValue());
				Date date = new Date(cookieValue);
				out.print(date.toLocaleString());
			}
		}
		
		
		// 给用户会送最新的访问时间
		Cookie cookie = new Cookie("lastAccessTime",System.currentTimeMillis()+"");
		cookie.setMaxAge(30*24*3600);				// 设置有效事件
		cookie.setPath("/ServletDemo");				// 当访问这个项目下的资源的时候,就带这个cookie值过去
		
		response.addCookie(cookie);					// 将cookie传给浏览器
	}

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

四:Session详解

1、在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意,一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其他长须时,其他程序可以从用户的session中取出该用户的数据,为用户服务。

2、session 和 cookie 的主要区别:

a、Cookie 是把用户的数据写给用户的浏览器

b、session 技术把用户的数据写到用户独占的session中

3、session 对象由服务器创建,开发人员可以调用request 对象的getSession方法得到session对象

范例:一个购物的简单原理

package com.haizhu.session;

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.http.HttpSession;

// 则个作为购物车,存储选中的商品
public class ServletSessionDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		HttpSession session = request.getSession();
		session.setAttribute("name", "洗衣机");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request,response);
	}
}
package com.haizhu.session;

import java.io.IOException;
import java.io.PrintWriter;

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

public class ServletPaySessionDemo extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/heml;charset=UTF-8");
		PrintWriter out = response.getWriter();
		
		HttpSession session = request.getSession();
		String product = (String)session.getAttribute("name");
		out.write("您购买的商品是:"+product);
	}

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




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值