面试的时候经常被问到Cookie禁用了,Session还能用吗?不同的公司给出的答案也有点不同,到底Cookie禁用了,Session还能用吗?很是郁闷?......
很感谢每一位回答者,也希望能有更好的答案。大家一起加油!
cookie禁用了session是 可以用 的。
拿php来说,在php里使用session会在cookie里添加 PHPSESSIONID
用来记录用户的session的id。
那么既然cookie禁用了,必然PHPSESSIONID
就写不进去了。
但是 实现session的方式 并不是只有写cookie这一种啊。
其他方式:
URL重写方式
比如url是 http://xxx.com/?sessionid=xxxxxx 这种的,每次get参数都带上这个id就可以达到相同效果。
hidden input
这种更好理解 就是在form里面加入sessionid。
<input type="hidden" name="sessionid" value="xxxxxxxx" />
http的无状态的特性,使得服务器无法知道当前请求者的身份。所以服务器需要给客户端发一个门卡,每个请求过来,刷一下门卡,服务器就知道你是谁了。cookie只是门卡的一种,由于它实现起来比较简单,兼容性也很好,所以广泛应用。其实用url来传递SessionId,也是一个不错的方案。比如 example.com?session_id=xxxxxxx
,在服务器上实现一个读取并验证session_id
的方法就可以。当然,很多程序员感觉这样暴露Sessionid会不安全。其实,用cookie一样是暴露的,连cookie都拿不到的人,是不可能对你的网站构成威胁的。sessionId的安全性,取决后端的加密算法和过期策略等等。