初识Cookie与Session机制(图文详解)

1、Cookie

cookie是一小段文本信息,通过使用cookie可以标识用户身份、记录用户名及密码、跟踪重复用户等。cookie在服务器生成并发送给浏览器。cookie的信息格式为key/value,有浏览器保存在本地的缓存中。可以提高服务端的效率,但安全性较差。

在JSP中,cookie不属于内置对象,若要向客户端发送cookie,则必须new一个对象。cookie的对象由javax.Servlet.http.Cookie产生。

关于cookie常用的方法:

public Cookie(String key,String name):cookie的构造方法。

String getName():获取cookie对象的key

String getValue():获取cookie对象的value

void setMaxAge():设置cookie对象的最大有效时间

下面看看服务端向客户端发送Cookie的过程:

response.addCookie(Cookie cookie)
            页面跳转(请求转发、重定向都行)
            客户端获取Cookie(request.getCookies();

下面是登录案列:

//login.jsp
 
用户名:">
密码:

//response_addCookie.jsp
<%
    	String name = request.getParameter("userName");
    	String pwd = request.getParameter("userPwd");
    	
    	//服务端
        //创建Cookie对象
    	Cookie cookie1 = new Cookie("name",name);
    	Cookie cookie2 = new Cookie("password"),

    	response.addCookie(cookie1);
    	response.addCookie(cookie2);
    	
    	//页面跳转到客户端(转发重定向)
    	response.sendRedirect("result.jsp");
    	
    	
    	
 %>
 //result.jsp
<%
    		//客户端
            //获取服务端传过来的所有Cookie
    		Cookie[] cookies= request.getCookies();
    		for(Cookie cookie : cookies){
    			out.print(cookie.getName()+"..."+cookie.getValue()+"
"); } %>

在浏览器中运行可以:

初识Cookie与Session机制(图文详解)_第1张图片

可以看到result.jsp一共获得了三个cookie,其中name和password是在login.jsp登录时用的用户名和密码,在response_addCookie.jsp在获取并发送回给客户端。再由result.jsp打印出来。但是最后获取到的cookie值有三个。在这里先注意一下JSESSIONID,后面将会讲解。

以下是Cookie的运行机制图:

初识Cookie与Session机制(图文详解)_第2张图片

首先,用户通过客户端的login.jsp登录,此时,请求转发到服务端的check.jsp。check.jsp可以对客户端传过来的数据进行验证,创建自定义的cookie对象,并放入到response中(response.addCookie(cookie);),接着重定向到新的跳转页面。并将cookie到发送到客户端中。且cookie在被存储在浏览器中。需要注意的是,客户端用request获取Cookie对象,但每次不能获取一个值,只能将所有的cookie同时获取(Cookie[] cookies = request.getCookies();)

2、Session

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

在每一次打开一个网站时:从开启到关闭可称为一次会话。

Session的运行机制:

客户端第一次请求服务端时,服务端会产生一个session对象(用于保存给客户的信息)
            并且每个session对象都会有一个唯一的sessionID(用于区分其他session)
            服务端又会产生一个Cookie,并且该cookie的name=JSESSIONID,value=服务端sessionID的值
            然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID)
            因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID-session-Id)

            
            客户端第二/N次请求服务端时,服务端会先用客户端cookie中的JSESSIONID去服务端中匹配sessionID,如果匹配成功(cookie JSESSIONID的值等于session sessionID的值)说明此用户不是第一次访问,无需登录

举个例子:

假设客户端是客户,服务端是酒店。客户(客户端)刚入住酒店时,前台(服务端)会判断此人是否是已登记(第一次访问),若为第一次登记,则前台会给其分配一张门卡(JSESSIONID)。且门卡(JSESSIONID)和门锁(sessionID)一一对应(建立会话)。第二次或第N次回酒店时(请求服务端),通过你手里是否有与门锁对应的门卡(JSEESIONID==sessionID)判断是否需要新建会话。而当你隔天办理退房手续时,则视为会话结束。(皮中带骚,手动滑稽)

 Session运行机制图如下:

初识Cookie与Session机制(图文详解)_第3张图片

session的常用方法:

String getId();获取sessionID        
           boolean isNew():判断是否是新用户(第一次访问)
           void invalidate():使session失效(退出登录、注销)
           void setAttribute():
           Object getAttribute():
           void serMaxInactiveInterval(秒):设置最大有效非活动时间
           int getMaxInactiveInterval():获取最大非活动有效时间

 

举个例子:

//check.jsp
<%
    	request.setCharacterEncoding("utf-8");
    	String name = request.getParameter("useName");
    	String pwd = request.getParameter("usePwd");
    	if(name.equals("Emove") && pwd.equals("123456")){
    		//只有登录成功,session中才会有userName和userPwd
    		session.setAttribute("userName", name);
    		session.setAttribute("userPwd", pwd);
    		//服务端在第一次响应客户端时,会发送一个JSESSIONID的cooike
    		System.out.print("sessionid:"+session.getId()+"
"); Cookie cookie = new Cookie("name",name); response.addCookie(cookie); //设置最大非活动时间10秒 //session.setMaxInactiveInterval(10); //跳转到welcome request.getRequestDispatcher("Welcome.jsp").forward(request, response); }else{ //登录失败 response.sendRedirect("login.jsp"); } %>
//Welcome.jsp
欢迎您:
    	<%	
    		String name = (String)session.getAttribute("userName");
    		//如果用户没有登录,而是直接通过地址访问,则获取到的地址必然是null,
    		if(name!=null){
    			out.print(name);
    			
    			
    	%>
    			
    	注销		
    	<%
    		}else{
    			//跳回登录页
    			response.sendRedirect("login.jsp");
    		}
    		
    			
    			
    	 %>

初识Cookie与Session机制(图文详解)_第4张图片

3、cookie和session的区别

 

session

cookie

保存的位置

服务器

客户端

安全性

较安全

较不安全

保存的内容

Object

String

 

你可能感兴趣的:(JSP学习)