1.cookie不安全,而sessionid也是放在cookie里,是不是没有区别,不安全?
答:首先cookie是放在HTTP头部字段的东西,里面存放的是身份标识数据。由于cookie是明文显示的,如果身份标识数据是用户密码,那肯定不安全。存放在客户端,容易被篡改。
而sessionid也是身份标识数据,但是是放在服务端的,就是一个单纯的id,就算被知道了,也不知道用户密码。所有sessionid是存在在cookie里的。
安不安全取决于身份标识数据存放的是什么。而争对cookie安全问题,JS脚本可以用document.cookie来读写cookie,有可能导致XSS(跨站脚本)攻击,防止方法:
(1)属性HTTPonly,告诉浏览器,只能通过浏览器HTTP协议传输。JS引擎就能禁用document。cookie等一切相关API,就没有脚本攻击了。
(2)属性sameSite,防范“跨站请求伪造”,可以设置cookie不随着跳转链接跨站发送。
(3)secure,表示cookie只能使用HTTPS加密传输,但cookie本身不加密还是明文。
2.token和sessionid有什么区别?
答:session是存放在服务端的。如果服务器做了负载均衡,请求定向到其他服务器节点,那台服务器没有用户session信息,就不能验证。所有session是不适合作分布式部署的。而且服务器重启,没有持久化存储的话,session数据会丢失。
而token是存放在客户端的,时间换空间,是无状态的,所以在分布式应用广泛。token是令牌,访问API接口所需的资源凭证。token使服务器无状态,不存储会话信息。
session是记录客户端和服务器会话状态的机制,服务器有状态,可以记录会话信息。token有签名还能防止监听和重发攻击,所以比session安全。
session认证是由于sessionid的不可预测性,安全的。而token,类似于OAuth token提供了认证(用户)和授权(APP),目的是让某APP有权访问用户信息。
总之,如果你的用户数据需要和第三方共享,或者第三方(除了你和服务器)调用API接口,就用token。如果是自己的网站,都可以。
3.只要关闭浏览器,sessonid就消失?