(单点登录)跨域SSO看这篇文章就够了:服务器篇
二:Cookie增删改查
如何读取Cookie?
通过Servlet中的request对象可以读取到Cookie数组,然后foreach遍历读取,一般只是获取到nam和value,其他信息写入到浏览器后,浏览器不主动再发回来,读取并无意义。
如何写入Cookie带浏览器?
新建Cookie对象设置一系列属性,然后添加到response中去。需要注意的是,当设置path为“/”时,表示所有路径都会被该Cookie作用到,如果设置为/path1那么由/path2发起请求就不会携带该Cookie。默认不设置只作用在当前路径下。
修改Cookie
修改更新Cookie时,除了要保证Cookie的name是相同的,也要保证Cookie的一系列属性是相同的,否则浏览器会生成新的Cookie。
删除Cookie
只需要设置Cookie的MaxAge为负值,意味着是过去的Cookie,浏览器就会清除。
下文将设计一些前端的内容。
三:跨域读写Cookie
1.利用HTML的script标签跨域写Cookie
比如当前域是,下面的script标签是跨域写cookie的核心,通过此标签实现了向域写入cookie:
P3P协议
P3P是一种被称为个人隐私安全平台项目(the Platform for Privacy Preferences)的标准,能够保护在线隐私权,使Internet冲浪者可以选择在浏览网页时,是否被第三方收集并利用自己的个人信息。如果一个站点不遵守P3P标准的话,那么有关它的Cookies将被自动拒绝,并且P3P还能够自动识破多种Cookies的嵌入方式。p3p是由全球资讯联盟网所开发的。
举个例子:
我们在访问A网站时,理论上说,我们只能把Cookie信息保存到A站域名下,而不能写入到B网站下。如果想要跨域读写Cookie,只是通过script标签变相访问B网站在一些浏览器是行不通的,此时B网站的服务器应该告诉浏览器允许A网站写入Cookie,否则浏览器将会拒绝执行,这就是P3P协议。
服务端如何告诉浏览器?
P3P提供了一种简单的方式 ,来加载用户隐私策略,只要在http响应的头信息中增加 response.setHeader(“P3P”,”CP=NON DSP COR CURa ADMa DEVa TAIa PSAa PSDa IVAa IVDa CONa HISa TELa OTPa OUR UNRa IND UNI COM NAV INT DEM CNT PRE LOC);而无需指定隐私策略文件也可以达到指定隐私策略的目的。 CP=后面的字符串分别代表不同的策略信息。
总结
因为P3P协议所以不能保证所有浏览器都能通过script标签方式跨域写Cookie,有的浏览器本身就是拒绝跨域的。
显然这种方式是不能保证跨域写cookie的成功性。
既然这种方式不能保证成功性,那我们该怎么做呢?不要着急,这个问题的答案将会在下一篇文章:前端篇,进行解答~
尾声
关于服务端的内容,到此就说完了。可能有朋友会问,这也没什么太多的服务端的内容啊?甚至还有很多前端的内容。
没错的确是这样,为什么呢?那是因为关于Cookieb本身来说,对于服务端的要求就没有太多的内容。说白了就是增删改成,过期时间。
本系列,试图用最简单的方式,去解释解答经典的业务问题,有深入不到的地方,欢迎各位评论、留言、交流、探讨~