发表于: 2017-11-02 22:09:14
1 684
今天完成的事情
学习Cookie
Cookie是一种浏览器和服务器交互数据的方式
Cookie是由服务器端创建的,但不会保存在服务器,创建之后,会被发送到浏览器,由浏览器保存在本地,在下一次访问网站时浏览器就会把Cookie发送到服务器,进行验证。
为什么用Cookie
因为web应用程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据时就需要建立新的连接。也就是当前的操作与之前的操作没有关系,无论上次操作是否成功,都不会影响本次操作。但是,在实际应用中,需要根据用户的操作来为用户设置不同的权限,这就要求对单一用户一系列的操作有一定的逻辑判断,Cookie和Session可以实现这种需求。
Cookie实际就是一小段文本信息,客户端发送请求,服务端使用response向客户端浏览器创建一个Cookie,浏览器会将Cookie保存在本地,当浏览器再访问该网站时,浏览器将请求连同Cookie一起提交给服务器,服务器根据Cookie来辨别用户。
尝试在jsp中创建Cookie:
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie" %>
<%
Cookie c=new Cookie("name","kelisi");
c.setMaxAge(60*24*60);
c.setPath("127.0.0.1");
response.addCookie(c);
%>
<a href="getCookie.jsp">跳转到cookie的页面</a>
c.setMaxAge()表示有效时间,单位为秒
c.setPath()表示主机地址
在jsp页面获取Cookie:
<%@ page language="java" contentType="text/html;charset=UTF-8"
pageEncoding="UTF-8" import="javax.servlet.http.Cookie" %>
<%
Cookie[] cookies = request.getCookies();
if (null!=cookies)
for (int d = 0; d < cookies.length; d++) {
out.print(cookies[d].getName()+":"+cookies[d].getValue()+"<br>");
}
%>
可以在页面中显示出Cookei:
第一行为tomcat自身设置的Cookie
第二行为通过jsp页面创建的Cookie
之后尝试服务端创建Cookie
在登陆页面中输入用户名,进行登陆
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<!DOCTYPE html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<form action="login1" method="post">
账号:<input type="text" name="name"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登陆">
</form>
在控制器中创建Cookie,先验证用户名是否正确,不正确的话就继续停留在登陆页面
@RequestMapping("login1")
public String login1(HttpServletRequest request, HttpServletResponse response,
String name)throws NoSuchAlgorithmException,
UnsupportedEncodingException{
if (name.equals("123")){
long login_at=System.currentTimeMillis();
String m = login_at + name;
byte[] encryptBytes= DESEncryptTools.encrypt(m.getBytes(),key.getBytes());
String res = new String(encryptBytes);
Cookie cookie1 = new Cookie("usr",res);
cookie1.setMaxAge(20*60);
cookie1.setPath("home");
response.addCookie(cookie1);
request.getSession().setAttribute("usr","123");
System.out.println(cookie1.getName());
System.out.println(cookie1.getValue());
}
else return "login";
return "redirect:/home";
}
之后,System.currentTimeMillis()取得用户的登陆时间,将用户名和时间戳组成字符串,用DES来进行加密,DESEncryptTools为昨天写的工具类,然后将密文转换为字符串并放入创建的Cookie中,cookie1.setMaxAge(20*60)表示设置有效时间为20分钟,然后将创建的Cookie加入到相应中,最后重定向到home首页。
可以在浏览器中看到查看Cookie:
由于编码格式的问题,密文显示为乱码。
明天的计划
学习session
遇到的问题
怎样对token进行验证
收获
了解了Cookie
评论