cookie
Posted xinjingsiyuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cookie相关的知识,希望对你有一定的参考价值。
cookie是在客户端记录保存用户信息的,跟踪整个会话
给客户端发送一个通行证,每个客户一个
cookie 本质是一小段的文本信息 如:
原理
*客户端访问服务器的时候,服务端就会给客户端发一个身份证,客户端就会保存下这个身份证,
下次客户端再次访问的时候就可以携带这个身份证来访问服务器
***服务器在刚开始被访问的时候就会默认有一个Cookie返回给客户端;
添加数据
public void addCookie(Cookie cookie);
获取数据
public Cookie[] getCookies();//注意这里返回的是数组,因为Cookie是可以有多个的
设置Cookie有效期
public void setMaxAge(int expiry); //expiry 秒 逾期 值为0 代表删除Cookie
【登录页面 客户端】
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2019/3/2
Time: 15:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="doLogin.jsp" method="get">
用户名:<input type="text" name="name" required/><br/> <%--这里的 required 属性是必填项的意思--%>
密码: <input type="password" name="pwd"/><br/>
<input type="checkbox" name="xuan" value="love1">哟用、<br/>
<input type="checkbox" name="xuan" value="love2">哈哈、<br/>
<input type="checkbox" name="xuan" value="love3">呵呵、<br/>
<input type="checkbox" name="xuan" value="love4">嘻嘻<br/>
<input type="submit" value="注册"/><br/>
<%
String register = (String)request.getAttribute("register");//获取转发后的值
if(register!=null){
out.print(register);
}
out.print(session.getId());
%>
</form>
</body>
</html>
【接收登录验证 服务端】
<%--
Created by IntelliJ IDEA.
User: DELL
Date: 2019/3/9
Time: 11:32
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.CookieHandler" %>
<html>
<head>
<title>Title</title>
</head>
<body>
欢迎你
【中文乱码处理】 如:客户端以post方式提交的话
<%
request.setCharacterEncoding("UTF-8");//请求的编码方式设置为utf-8
%>
<%
response.setCharacterEncoding("utf-8");//设置相应时的编码方式为utf-8
%>
<%
//对面客户端提交数据给我这边,我现在要在这个服务端获取客户端提交的数据
//通过一个内置对象 getParameter获取单个值 getParameterValues()获取多个值
String name = request.getParameter("name");//获取单个值
String pwd = request.getParameter("pwd");//获取单个值
String[] xuan = request.getParameterValues("xuan");//获取多个值【区别 getParameter 多了个values】
%>
<br/> 获取到的信息如下:<%=name%> <br/><%=pwd%>
<br>用户选择的多个值内容是(爱好):
<%
if (xuan!=null){
for(String x:xuan){
out.print("<br/>"+x);
}
}else{
out.print("您没有选择多个值,如爱好");
}
%>
<%
//【练习】模拟实现自动在用户名这个框内填写 用户名 不需要用户填写
if(name.equals("admin")){//如果用户名是admin则注册失败,因为已经有了这个用户名
//提示用户注册失败
request.setAttribute("register","注册失败");
//跳转到原注册页面【转发】 通过请求对象 获得一个 内部的分发器,跳转到***.jsp去,并携带我的request && response
request.getRequestDispatcher("login.jsp").forward(request,response);
}else{//如果不是admin则注册成功,跳到注册成功页
session.setAttribute("name",name);//设置了session的属性和值
// 【拓展内容】如果用户输入框有中文怎么办呢 需要编码和解码
name=URLEncoder.encode(name,"utf-8");//按照utf-8的格式去编码这个 name再传过去 同样的那边接收的话就需要解码了
//创建一个cookie并发送给客户端
Cookie cookie = new Cookie("cookieKey", name);
//设置cookie有效期
cookie.setMaxAge(60*60);//单位秒 这里是60分钟的意思
cookie.setPath("/");//表示设置cookie路劲,以防等会找不到路径,这个意思是
//整个项目下都可以找到这个cookie
response.addCookie(cookie); //将用户输入的用户名传到Cookie中并发送给客户端
response.sendRedirect("loginSucceed.jsp");
}
//request.getContextPath() 这个方法是获取当前页面的位置的上下文路径
%>
</body>
</html>
【验证通过后】
<%@ page import="java.net.URLEncoder" %>
<%@ page import="java.net.URLDecoder" %><%--
Created by IntelliJ IDEA.
User: DELL
Date: 2019/3/9
Time: 14:24
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录成功</title>
</head>
<body>
注册成功页面<br>
<%
//现在获取cookie值
String value ="";//取出来的值
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){//将cookie取出来匹配
if(cookie.getName().equals("cookieKey")){//寻找匹配的key 注意这里是get它的key的name 不是用户名 而是key
value = cookie.getValue();
//【拓展内容】因为那边已经编码了传过来,所以这边需要解码
value= URLDecoder.decode(value,"utf-8");
}
}
}
%>
用户名:<input type="text" name="name" value="<%=value %>"/><br/>
欢迎你,
<%
Object name = session.getAttribute("name");//注意这里取出来的是Object类型的,所以需要转型
if(name!=null){
out.print(name.toString());
}
%>登录 <br>
<a href="loginOut.jsp">注销</a>让会用点击注销后 使session过期
打印sessionId<% out.print(session.getId());%>
</body>
</html>
以上是关于cookie的主要内容,如果未能解决你的问题,请参考以下文章