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

本文介绍了JavaWeb中利用Cookie实现用户密码保存的原理和方法。Cookie作为客户端技术,用于存储用户信息并在后续访问中自动填充。文章详细讲解了Cookie的属性、设置与读取,并提供了实际案例,如记住用户名、访问时间和浏览历史。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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


二、定义:Cookie和HttpSession简介

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


三、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文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>day7</display-name>
  <servlet>
    <servlet-name>CookUserDom1</servlet-name>
    <servlet-class>com.dp.java.Cookie.api.CookUserDom1</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>CookUserDom2</servlet-name>
    <servlet-class>com.dp.java.Cookie.api.CookUserDom2</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>CookUserDom1</servlet-name>
    <url-pattern>/servlet/CookUserDom1</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>CookUserDom2</servlet-name>
    <url-pattern>/servlet/CookUserDom2</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
  <welcome-file>MyJsp1.jsp</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    
  </welcome-file-list>
</web-app>

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<User> us=new ArrayList<User>();
	//初始化
	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<cs.length;i++){
			Cookie c=cs[i];
			if("userInfo".equals(c.getName())){
				String value=c.getValue();
				username=value;
				checked="checked='checked'";
				break;
			}
		}
		//提供登陆页面
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out=response.getWriter();
		//用户名不要存中文,因为Cookie存不了中文格式
		out.write("<form action='/day7/servlet/CookUserDom2' method='post'><br>");
		out.write("用  户 名:<input type='text' name='username' value=''><br>");
		out.write("密      码:<input type='password' name='password' value=''><br>");
		out.write("记住密码:<input type='checkbox' name='gen'><br>");
		out.write("<input type='submit'  value='提交'>");
		out.write("</form>");
	}

	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("登陆成功!!!<a href='/day7/servlet/CookUserDom1'>返回登陆页面</a>");
	}

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

		doGet(request, response);
	}

}


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

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


<link href=path/>                                要加/day07(客户端行为)(绝对路径)
<script src=path/> 要加/day07(客户端行为)((绝对路径)
<img src=path/> 要加/day07(客户端行为)((绝对路径)
<a href=path/> 要加/day07(客户端行为)((绝对路径)
RequestDispatcher.include(path) 不要加,"/"就代表着当前应用(服务器行为)
RequestDispatcher.forward(path) 不要加,"/"就代表着当前应用(服务器行为)
HttpServletResponse.sendRedirect(path) 要加/day07(客户端行为)(绝对路径)
ServletContext.getRealPath(path) 不要加,"/"就代表着当前应用(服务器行为)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值