cookie和session的联系和区别
cookie存放于用户浏览器,session存放于服务器内存,两者通常是协调工作
session
session是服务端保存的一个数据结构,用来跟踪和用户对话的状态,这个数据可以保存在集群、数据库、文件中
session会话时长据服务器设置,一般在二三十分钟左右
cookie
cookie是客户端保存用户信息的机制,用来记录用户相关的信息(uid等),也是实现session的一种方式
cookie是存储key-value对的一个文件,是由服务器将cookie添加到response里一并返回给客户端,然后客户端会自动把response里的cookie接收下来,并且保存到本地,下次发出请求的时候,就会把cookie附加在request里,服务器在根据request里的cookie遍历搜索是否有与之符合的信息
大多数应用是用cookie来实现session跟踪
cookie安全性不如session,如果能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是认为你是合法的,所以使用 cookie被攻击的可能性比较大
可人为设置 cookie有效时长
使用cookie的前提:
- 不要保存私人信息
- 任何重要数据,最好通过加密形式来保存数据(最简单的可以用URLEncode,当然也可以用完善的可逆加密方式,最好不要用md5来加密)
- 是否保存登陆信息,需有用户自行选择
- 长于10K的数据,不要用到Cookies
- 不要用Cookies来玩点让客户惊喜的小游戏
cookie和session如何协作?
服务器第一次创建session时,会在cookie里面记录一个jssesionid,以此来为每个用户进行标记
每次HTTP请求,客户端都会发送相应的cookie信息到服务端,由服务器识别用户信息
session是用户在服务器配置的单独的储物柜,cookie就是打开这个储物柜的钥匙
新开一个窗口,等于是新开启一个对话,服务器需要通过浏览器的jsessionid来确认是否是之前同一个对话(session)
浏览器禁用cookie咋办?
利用URL重写技术:每次HTTP交互,URL后面都会附加一个sid=XXXXX格式的参数,服务器以此来识别用户(详见jsp章节)