Cookie:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来。当下次你再光临同一个网站,WEB
服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你.
Session:指的就是访问者从到达某个特定主页到离开为止的那段时间,在服务器存储用户的相关信息。
共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
当前项目里并没有使用传统的账号密码的形式,而是使用手机号验证码登录。当用户第一次登录成功后,我们会把用户的userid等信息生成加密字符串以token的形式放在cookie中过期时间是3个月,使用response返回,只要用户设备不清除缓存那么之后很长一段时间内再次请求时request中带上此token都是默认登录的。
我们项目中自定义了一个注解@UserId(require=true),如果controller层的方法参数中有该注解且require=true就说明需要用户进行登录操作。然后又使用了handlerMethodArgumentResolver接口这是一个参数解析器,重写了其中的supportParamter和resolveArgument方法,在supportParamter判断参数是否被@UserId注解修饰,如果有被@UserId修饰的参数那么就会执行resolveArgument方法,在supportParamter中判断request的cookie中是否有token字符串,如果token不存在且该注解的require为true就会抛出未登录异常,由web捕获让用户登录;否则解密token,转为对象获取userid的值,赋予该参数。