使用cookie自动填写用户名
cookie
是什么
cookie是web服务器储存在用户本地终端上的数据,以key-value的形式保存在temp文件夹中。
应用场景
1.浏览器关闭,会话结束,有些论坛在用户再次进入的时候却可以识别用户身份,并且用户状态为:已登录。
2.用户每次访问邮箱的时候,页面上会自动显示该用户名。
3.搜索记录。
工作方式
1.cookie由浏览器保存。
2.cookie由web服务器处理。
3.用户可以禁用cookie。
方法 | 功能描述 |
---|---|
public void addCookie(Cookie cookie) | 添加数据 |
public Cookie[] getCookies() | 获取数据 |
public void setMaxAge(int expiry) |
代码实现
<%@page import="java.net.URLEncoder"%>
<%@page import="javax.print.URIException"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String cu_name=request.getParameter("cu_name");
String cu_phone=request.getParameter("cu_phone");
Connection conn = null;
try{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/ishopn?characterEncoding=utf8";
String user="root";
String password="1234";
conn = DriverManager.getConnection(url, user, password);
String sql = "select count(*) from customer where cu_name=? and cu_phone=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, cu_name);
ps.setString(2, cu_phone);
ResultSet rs = ps.executeQuery();
rs.next();
int c = rs.getInt(1);
if(c>0){
// 当你用户名和密码判断正确的时候 将用户名保存至cookie
// 保存cookie是浏览器的动作 如果放在跳转之后 代码是执行的 但是浏览器已经跳转了 就无法保存
String cu_name_utf8=URLEncoder.encode(cu_name, "utf-8");
Cookie cookie = new Cookie("cu_name",cu_name_utf8); // new Cookie(String key,String value);
//cookie.setMaxAge(600); //单位是秒 是cookie的保存的最大时间 时间到了 浏览器自动清除
//cookie如果中文乱码的解决方法
response.addCookie(cookie);
response.sendRedirect("/web03/welcome.jsp");
}else{
response.sendRedirect("/web03/index.jsp?err=1");
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn!=null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
%>
Session
会话
是什么
会话是指一个终端用户与交互系统进行通讯的过程,比如从输入账户密码进入操作系统到退出操作系统就是一个会话过程。会话较多用于网络上,TCP的三次握手就创建了一个会话,TCP关闭连接就是关闭会话。
工作方式
在服务器接收到第一次的请求的时候,就会建立新的会话。服务器就会为这次会话创建一个整个服务器都唯一的sessionid。关闭浏览器后,重新打开浏览器,获取不到以前的session中的内容,sessionid变了。浏览器即得不到其他浏览器会话的数据,也得不到上一次浏览器会话的数据。
会话的清除和过期
- 若没有清理机制,会导致性能问题或服务器崩溃
程序主动清除session数据
服务器主动清除长时间没有再次发出请求的session
以session保存用户名
具体要求
登录后记住用户状态,并在多个页面显示用户名。
代码实现
<%@page import="java.net.URLEncoder"%>
<%@page import="javax.print.URIException"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String cu_name=request.getParameter("cu_name");
String cu_phone=request.getParameter("cu_phone");
Connection conn = null;
try{
Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/ishopn?characterEncoding=utf8";
String user="root";
String password="1234";
conn = DriverManager.getConnection(url, user, password);
String sql = "select count(*) from customer where cu_name=? and cu_phone=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, cu_name);
ps.setString(2, cu_phone);
ResultSet rs = ps.executeQuery();
rs.next();
int c = rs.getInt(1);
if(c>0){
String cu_name_utf8=URLEncoder.encode(cu_name, "utf-8");
//以session来保存用户名称 即可以解决中文的问题 还有一个非常重要的特点
//session的value可以存Object
session.setAttribute("cu_name", cu_name);
response.sendRedirect("/web03/welcome.jsp");
}else{
response.sendRedirect("/web03/index.jsp?err=1");
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(conn!=null){
try{
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
%>