关于cookie和session的区别:
通常意义上的cookie指的是利用客户端的技术在计算机用户的文件夹下存储的文件,又名硬盘cookie,一般来说是有上限的。我的cookie是存在D:\Documents and Settings\qixiaobo\Local Settings\Temporary Internet Files下面,命名规则是cookie:[用户名]@[网站],打开后可发现通常是经过md5编码的。并且它的换行符在windows识别为乱码,表示服务器应该是Linux平台。(windows换行符是\r\n 而Linux换行符是\r)
而session,又名内存cookie,一般而言是指存放在服务器上的,当用户访问某个网站,网站服务器为用户分配一个Session ID,一般的表现形式为JsessionID,并且也是以cookie的形式存放在客户端,但是他的生命周期就是浏览器进程。也就是说当该浏览器进程被关闭后,重新打开后的浏览器访问同一个网站的分配到的session ID将不是同一个session ID。当cookie被禁用后,编码人员应当考虑到这种情况,应该利用Java提供的方法重写每一个链接。因为此时浏览器无法提供cookie给服务器,所以按照HTTP的无状态,应当无法知道该用户的信息。但是当利用了重写技术后,可以将session ID附加到每一个链接后面,以此来确定用户的信息。
一般的购物网站,如果用户是未注册会员,应当也会记录用户的信息,此时虽然用户用的是session,但是程序员会将用户的session回写回cookie,也就是将cookie的setMaxAge设置为有效的长时间。也更加说明了session的表现形式是cookie。
关于cookie和session的安全:
一般的记住客户信息有如下几种方式:
1.浏览器记住,这是个大浏览器厂商在对自己浏览器功能的增强,非Java Web程序员所能够利用的。
2.普通程序,一般是将用户名,密码写在Properityies文件或者ini文件或者xml文件中。
3.利用cookie,将用户信息直接回写给客户端,并且大部分的网站都提供了该方式,通常的变现形式如下:
两周内免登录就是指的是将信息利用cookie技术回写至客户端。
并且百卓的搜索中的最近搜索就是利用cookie来保存的,一旦禁用cookie将无法使用该功能。
4.利用session,如上图,如果两周内免登录不勾选上,表示是利用session技术记住用户信息,一旦浏览器关闭了后重新打开,用户信息依旧是需要输入的。
总结:
正因为cookie是以文件的形式写给浏览器,所以被许多人所诟病。表明其是可修改的,有部分人可以利用技术修改cookie达到自己不付费或者少付费的目的。并且cookie会暴露一个人的隐私等。
但是session确实不太方便,因为session的生命周期是浏览器进程,而通常人们访问某个网站都不是一次性的,而每次都要输入各种信息也比较繁琐。
因此有人发明了所谓的替代方案,将用户信息保存在某个服务器里,而用户只需要记住一个用户名和密码即可,称为主密码。大名鼎鼎的LastPass就是这样一款基于Chrome和Firefox的插件,但是实质上依旧是将客户信息保存起来,一旦服务器被别人所控制,还是会造成用户信息的丢失。
就目前的互联网来说,主流仍然是利用cookie和session一起来保存用户的信息。并不会说只采用一种。
来源:oschina
链接:https://my.oschina.net/u/871390/blog/134920