JavaWeb_cookie和session

1.cookie
    cookies是一种服务器通过浏览器在访问者的硬盘上存储信息的手段,当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。

    (1).创建Cookie 
        Cookie cookie = new Cookie("history", value);
        cookie.setMaxAge(5); //单位为second
        //setMaxAge(0) 可以删除cookie
        cookie.setPath("/");
        response.addCookie(cookie);//将cookie写入response,以便保存至用户的硬盘上

   (2).cookie的相关方法
        getComment()返回cookie中注释,如果没有注释的话将返回空值.
        getDomain() 返回cookie中Cookie适用的域名. 
        getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。
        getName()返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。
        getPath()返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。
        getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。
        getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。
        getVersion() 返回Cookie所遵从的协议版本。

        setComment(String purpose) 设置cookie中注释。
        setDomain(String pattern) 设置cookie中Cookie适用的域名
        setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。
        setPath(String uri) 指定Cookie适用的路径。
        setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。
        setValue(String newValue) cookie创建后设置一个新的值。
        setVersion(int v) 设置Cookie所遵从的协议版本。

2.session


    session是在服务器端建立的,浏览器首次访问服务器getSession()会有一个sessionid,其中隐含将sessionid值作为cookie写回浏览器硬盘,然后浏览器端通过cookie携带的sessionid值,来定位服务器端的session,session的创建和销毁由服务器端控制。由于sessionid值作为cookie保存时,并没有设置cookie的保存时间,当浏览器关闭后cookie也失效,但session还存在在服务器端。

    session的生命周期
    (1).第一次访问getSession()创建session
    (2).摧毁
         1).自动摧毁
              摧毁默认为30分钟没有访问
              <session-config>
                   <session-timeout>60</session-timeout> <!-- 手动设置默认值 分钟 -->
              </session-config>
         2).手动摧毁
             request.getSession().invalidate(); 
         3).客户端关闭浏览器


   浏览器端session手动设定时间
    String sessionid = session.getId();
    Cookie cookie = new Cookie("JSESSIONID", sessionid);//覆盖session隐含的cookie
    cookie.setMaxAge(60*5); //为该cookie设定时间
    response.addCookie(cookie);


有的代码只需获取Session,request.getSession(false); 没有必要创建session,性能更好

3.关于cookie的应用

/*
 * cookie的应用--关于浏览历史记录
 */
package cn.baidu.cookie;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;

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 book extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		Map<Integer, String> books = new HashMap<Integer, String>();
		books.put(1, "JavaWeb");
		books.put(2, "C++");
		books.put(3, "c语言");
		books.put(4, "Ug");
		books.put(5, "Autocad");
		books.put(6, "grip");
		books.put(7, "css");
		
		PrintWriter out = response.getWriter();
		for(Integer i: books.keySet()){
			out.print("<font size='4' color='red'>"+i+"</font>.<a href=/Day01/servlet/bookInfo?id="+i+">"+books.get(i)+"</a><br>");
		}
		
		Cookie[] cookies = request.getCookies();
		if(cookies != null){
			for(Cookie cookie: cookies){
				if(cookie.getName().equals("bookViewHistory")){
					out.print("<br><br>您已经浏览过的商品:<br>");
					String[] ids = cookie.getValue().split("\\,");
					for(int i=0; i<ids.length; i++){
						out.print("<a href=/Day01/servlet/bookInfo?id="+ids[i]+">"+books.get(Integer.parseInt(ids[i]))+"</a><br>");
					}
				}
			}
		}
		
	}

}
package cn.baidu.cookie;

import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;

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 bookInfo extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		String id = request.getParameter("id");
		if(id==null && id.equals("")){
			return;
		}
		String cookieValue = getCookieValue(request, id);
		Cookie cookie = new Cookie("bookViewHistory", cookieValue);
		cookie.setMaxAge(60);
		cookie.setPath("/Day01/servlet/");
		response.addCookie(cookie);
		
	}
	private String getCookieValue(HttpServletRequest request, String id) {
		Cookie[] cookies = request.getCookies();
		String str = null;
		int i = 0;
		for(i=0; cookies!=null && i<cookies.length; i++){
			if(cookies[i].getName().equals("bookViewHistory")){
				str = cookies[i].getValue();
				break;
			}
		}
		if(cookies==null || i==cookies.length){
			System.out.println("sss");
			return id;
		}
		/*
		 * 注意使用LinkedList可以大大节省代码书写
		 * 1).先将数组转为List集合
		 * 2).再将该集合作为Linkedlist的构造的参数,新建一个LinkedList集合
		 * 
		 * 要记住该功能,以方便使用
		 */
		LinkedList<String> list = new LinkedList<String>(Arrays.asList(str.split("\\,")));
		if(list.contains(id)){
			list.remove(id);
		}else{
			if(list.size() >= 3){
				list.removeLast();
			}
		}
		list.addFirst(id);
		
		StringBuilder sb = new StringBuilder();
		for(String s: list){
			sb.append(s+",");
		}
		return sb.toString();
	}
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值