javaweb中Cookie对用户密码保存的例子

问题?在浏览相关网页登陆用户密码的时候,都会提示,是否记住当前用户名及密码提示。但是相关的代码怎么做呢?


一、原理:其实这其中主要用到了Cookie的应用,Cookie相当于一种标志或者是一种缓存,在当地浏览器中存在着, 当你记住密码的时候就会写入这个缓存或者标志。等你下载访问的时候就会提取出来放置在表单中。


二、定义:Cookie和HttpSession简介

Cookie是客户端技术
HttpSession是服务器端技术

javaweb中Cookie对用户密码保存的例子_第1张图片

三、ookie详细介绍
javax.servlet.http.Cookie
1、Cookie是什么?
一个小信息,由服务器写给浏览器的。由浏览器来保存。
客户端保存的Cookie信息,可以再次带给服务器。
2、Cookie的属性:
name:必须的
value:必须的
comment:可选的。注释
path:可选的。
写Cookie的程序的访问路径是:http://localhost:8080/day07/servlet/CookieDemo1
其中:localhost就是域名;/day07/servlet就是当前Cookie的path


访问的地址的URI.startWith(cookie的路径),       为true就带

比如IE存的cookie的路径是/day07
现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1     带
现在访问的地址是:http://localhost:8080/day07/CookieDemo1                  带

比如IE存的cookie的路径是/day07/servlet/
现在访问的地址是:http://localhost:8080/day07/servlet/CookieDemo1      带
现在访问的地址是:http://localhost:8080/day07/CookieDemo1               不带

如果一个Cookie的路径设置成了/day07,意味着什么?当前应用下的所有资源浏览器都会带着它给服务器。

domain:可选的。该Cookie所属的网站域名。(itcast.cn)默认值。
maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。单位是秒
如果是0,说明要删除。
version:可选的。

3、如何向客户端写Cookie:HttpServletResponse.addCookie(javax.servlet.http.Cookie)(就是写了一个响应消息头:Set-Cookie:cookie的信息)
特点:一个浏览器针对一个网站最多存20个Cookie;最多存300个Cookie,每个Cookie的长度不能超过4KB。(稀缺)

4、服务器如何得到客户端传来的Cookie。HttpServletRequest.getCookies()
5、如何区分Cookie:通过名称不行。根据name
domain+path+name来区分的。
如:localhost/day07/servlet/lastAccessTime


四、写一个Cookie案例:
1.记住用户最后一次的访问时间
2.记住用户登录时的用户名
3.电商网站:记住用户商品的历史浏览记录


xml文件:



  day7
  
    CookUserDom1
    com.dp.java.Cookie.api.CookUserDom1
  
  
    CookUserDom2
    com.dp.java.Cookie.api.CookUserDom2
  


  
    CookUserDom1
    /servlet/CookUserDom1
  
  
    CookUserDom2
    /servlet/CookUserDom2
  
  
  
  MyJsp1.jsp
    index.jsp
    
  

JavaBean类文件


package com.dp.java.Cookie.api;

public class User {
	private String username;
	private String password;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	//根据字段生成它的构造方法
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public User() {}
}

package com.dp.java.Cookie.api;

import java.util.ArrayList;
import java.util.List;

public class Userlist {
	private static List us=new ArrayList();
	//初始化
	static{
		us.add(new User("a1", "123456"));
		us.add(new User("a2", "123456"));
		us.add(new User("a3", "123456"));
	}
	public static User findUser(String username,String password){
		User user=null;
		for(User u:us){
			if(username.equals(u.getUsername())&&password.equals(u.getPassword())){
				user=u;
				break;
			}
		}
		return user; 
	}
}

用户登录页面的设计(这里直接用servlet实现的,没有jsp文件或者html文件,但是原理是相同的)


package com.dp.java.Cookie.api;

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

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 CookUserDom1 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//读取记住的用户名,如果没有不会显示
		String username="";
		String checked="";
		
		Cookie cs[]=request.getCookies();
		for(int i=0;cs!=null&&i
"); out.write("用 户 名:
"); out.write("密 码:
"); out.write("记住密码:
"); out.write(""); out.write(""); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }


用户名和密码的处理及Cookie处理


package com.dp.java.Cookie.api;

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

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//完成登陆
//根据是否需要记住用户密码来写Cookie
public class CookUserDom2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		String rember=request.getParameter("gen");
		//验证
		User user=Userlist.findUser(username, password);
		if(user==null){
			out.write("错误的用户和密码");
			return;
		}
		
		//处理Cookie: name:userInfo(即Cookie测名字)
		Cookie c=new Cookie("userInfo", username);
		c.setPath(request.getContextPath());
		if(rember==null){
			//删除Cookie
			c.setMaxAge(0);
		}else{
			//记住Cookie
			c.setMaxAge(60*60);//只保存一分钟			
		}
		response.addCookie(c);//写回Cookie
		out.print("登陆成功!!!返回登陆页面");
	}

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

		doGet(request, response);
	}

}


记得访问第一个/servlet/CookUserDom1喔!!

五、各种URL地址的写法
相对路径
绝对路径:(建议的)
绝对路径怎么写?什么时候需要加上应用名称"/day07"?
注:原则:地址是不是给服务器用的,如果是,"/"就代表着当前应用。如果是给客户端用的“绝对路径” 加上应用名称。


                               要加/day07(客户端行为)(绝对路径)

你可能感兴趣的:(--------《Java》)