发表于: 2018-04-25 22:44:19
1 616
今天完成的事情:
1.cookie 的分类
cookie 按照其属性的不同,常见的可以分为以下类别:
session cookie
session cookie 没有过期时间,当浏览器关闭后就消失了,浏览器将没有设置过期时间的 cookie 作为 session cookie 来处理。
Persistent cookie
Persistent cookie(意为:持久 cookie),这类 cookie 有一个明确的过期时间,在这段时间里面访问 cookie 归属的网站的时候都会携带 cookie ,通常用 cookie 来存储一些用户的访问信息,比如保存用户的登录状态,用户不必每次访问网站都进行登录。
Secure cookie
Secure cookie ,这类 cookie 只会在加密传输的情况下携带,比如通过 HTTPs 传输的时候。在通过 HTTP 传输的时候,不会携带设置有 secure 标记的 cookie。
HttpOnly cookie
当一个 cookie 被设置为 httpOnly 的以后,这个 cookie 不能被 javascript 这样的脚本语言拿到,只能通过 HTTP 和 HTTPs 传输。
Third-party cookie
cookie 的 domain 属性和浏览器地址栏中 domain 一致的 cookie 叫做 first-party cookie, 第三方 cookie 就是其 domain 属性不同于 浏览器地址栏中的 domain 的,这类 cookie 通常是属于第三方广告商的,他们会记录用户的访问习惯,和浏览历史,以此做到准确投放广告。
对于其中的原理,可以举个例子说明:
当你访问 a.example.com 这个网站的时候,这个网站中引用了广告商 ad.com 的广告,当广告内容被下载后,广告提供商的脚本会设置一个属于 ad.com 的 cookie 。下次当你访问 b.example.com 的时候,这个网站的广告也是 ad.com 提供的,此时向 ad.com 请求广告内容的时候就会携带上次访问 a.example.com 的时候设置的 cookie 。
对于现代浏览器都提供了禁止第三方 cookie 的选项。
cookie 由一下几个部分组成:
name
value
其他属性
max-age
path
domain
secure
name 和 value
cookie 中 name 和 value 不能有 , ; = 以及空格 ,因为这几个符号是用来分隔 cookie 中的名和值的。如要包含,则要进行字符转译。在 javascript 中可以使用 encodeURIComponent 来完成。
对于服务器要设置 cookie 只需要在 HTTP 响应头部中使用 Set-Cookie: token=324 这样的方式就可以了。对于浏览器可以使用以下方法:
document.cookie="name=xiaowang";domain="example.com"
max-age
从设置 cookie 起,该 cookie 存在的秒数,如果设置 max-age=1000 那么该 cookie 会在 1000 秒后被删除。在早期可能存在 expires 这个属性,这个属性是设置一个具体的过期时间,在 HTTP 1.1 版本中以及被去掉了,但是浏览器还是会认识它,只是当 max-age 和 expires 同时存在的时候,认识 max-age 的浏览器会忽略 expires。关于这一点详细可以看这篇博客:HTTP Cookies: What's the difference between Max-age and Expires?。
domain 和 path
域名和路径定义了一个 cookie 的可见范围,它告诉浏览器这个 cookie 的归属范围。出于安全原因, domain 只能设置为当前域名的上层域名,比如在 example.com 下就不能把 cookie 的 domain 设置为 a.example.com ,而 a.example.com可以设置 cookie 的 domain 为 example.com
对于 path ,如果一个 cookie 的 path 为 /doc 那么在 /doc/ 下面的所有页面都能访问到这个 cookie (前提是 domain 也是满足要求)
另外对于 cookie ,不同的端口是否为跨域,这一点标准中尚未说明。经过测试不同端口是可以拿到互相拿到 cookie 的。
secure
设置了这个属性后,cookie 就成为一个 Secure cookie ,只会在加密传输的时候携带该 cookie。
(https://github.com/wy-ei/notebook/issues/28#issuecomment-266938374)
2.生成随机数。
public class TokenTest {
@Test
public void getToken() {
System.out.println("UUID随机生成唯一字符串是(替换了”-“):"+UUID.randomUUID().toString().replace("-", "*"));
//UUID随机生成唯一字符串是(替换了”-“):4f88482282c64dfda2e29f92ef77fbb3
System.out.println("UUID随机生成唯一字符串是:"+UUID.randomUUID().toString());
//UUID随机生成唯一字符串是:b4fe3028-6067-4388-9774-40d152a8911f
}
}
3.字符串加密
String name = "haha";
Cookie cookie = new Cookie(name, password);
MessageDigest md5 = null;
md5 = MessageDigest.getInstance("md5");
byte[] cipherName = md5.digest(name.getBytes());
String cipherNameStr = null;
System.out.println("cipherPassword" + cipherPassword);
for (int i=0;i<cipherName.length;i++){
cipherNameStr += cipherName[i];
}
System.out.println(cipherNameStr);
StringBuilder builder=new StringBuilder();
//haha 4e4d6c332b6fe62a63afe56171fd3725
//1243 4e4d6c332b6fe62a63afe56171fd3725e1d5be1c7f2f456670de3d53c7b54f4a
for (byte cipherN : cipherName){
String toHexStr = Integer.toHexString(cipherN & 0xff);
builder.append(toHexStr.length() == 1 ? "0" + toHexStr : toHexStr);
}
System.out.println(builder.toString());
明天的计划:
写filter控制页面权限
遇到的问题:
没有
收获:
学习cookie分类,字段意义。字符串加密
评论