发表于: 2017-10-29 22:59:37
1 725
今天完成的事
cookies是储存在用户本地终端的数据
怎样生成cookies
@RequestMapping("/addCookie")
public void addCookie(HttpServletResponse response,String name,String value){
Cookie cookie = new Cookie("123", "123");
cookie.setMaxAge(30 * 60);// 设置为30min
cookie.setPath("/");
System.out.println("已添加===============");
response.addCookie(cookie);
}
服务器生成一个cookie并把这个cookie通过响应的方式返回给本地的浏览器
我需要在cookies里面建一个token令牌
cookie主要包括:名字,值,过期时间,路径和域。
name可以随便取,value是des加密后的密文
接下来我需要生成一个token的cookie,里面包含的是id和logintime的密文
需要调用加密类的方法
我们先写一个简单的测试
.png)

这个测试成功验证了我可以收到cookie
我们可以给这个测试加个判断
如果数据库里面有这个用户则返回页面1,如果不是登录状态则返回页面2
.png)

这里面的用户名和密码是我自己填写的,当然我们也可以试着调用request里面的一些信息来验证,在实际应用在不可以把用户名和密码包含在cookie里面,这样很危险,这也是为什么任务5是要我们使用id和logintime的原因
我们还需要判断用户是否是登录状态
如果不是我们就要判断cookie的有效性
判断是否有效,能否自动登录
那么怎样才算是登录状态呢?
就用户而言当看到这段话的时候就知道自己已经登陆了
.png)

但对我们后端而言登录意味着什么呢?
后端怎么确认是在登录状态呢
因为以前从没考虑过这个问题,或者说一直是以用户的视角来看待登录的,所以现在对登录这件事造成了一定的认知障碍
if(request.getSession().getAttribute("loginuser")==null)
我们暂时先以简单的session中是否有loginuser这个元素来判断我们是否处于登录状态
当我们输入用户和密码,跟数据库里的信息配对后,我们算是登录了
然后我们登陆后在session中添加一个元素loginuser
退出时移除这个元素
如果没登陆会怎样呢
我们的cookie是怎样帮助我们自动登录的呢
服务器从请求中包含的cookie找有没有一个属性token,翻译过来就是令牌
如果有token并且token解密后的信息可以在数据库找到
这样我们就算是登陆了
那么我们就在session中加一个属性loginuser
当下次访问的时候识别到我的loginuser后,会判断我已经处于以登录状态
感觉之前一直认知错了
我一直以为只要登录使用使用某个url自然会创建cookie
我转变思路在登录方法上创建cookie
.png)

.png)

遇到的问题
.png)
token的值不能包含标点符号,至少,逗号就不行
我已开始没有加密cookie的值才会出现这种情况,一般加密后是不会出现逗号的
.png)

!=null和!xxx.equals("null")有什么不一样吗
equals 是值比较,==是比较内存
A==B,比较句柄,就是比较变量A,B的地址存放的东西,比如int A=0;String B="bbbb";那么变量A的地址方的就是0,B的地址却是放着存放"bbbb"的地址,比如是#FFFF000之类的。所以A==B就是比较0和FFFF000啦。
而A.equals(B),就是在A和B都是引用(对象句柄,就是存放了对象地址啦)时,比较A,B存放的地址里的内容。比如A="aaaa",b="aaaa",两个"aaaa"不管是不是同一个,A.equals(B)都是真。
明天计划的事
完成任务5
收获
终于知道token的机制是怎么一回事了
评论