Cookie小解

[size=medium]Cookie是客户端与服务器沟通的一个信息包
当服务器设置了客户端的Cookie后,只要没有过期,
浏览器每次请求都会带着这个Cookie,
这可以作为客户端的标志信息,向服务器端说明自己的身份.
其实这个Cookie在客户端是可以伪造的,不过是name=value键值对
这也警告了我们,客户端传递到服务器的任何信息都是不可靠的.
不要以为你用javascript控制了输入就可以阻止这种情况的发生.

对于这种不可信的情况,如果客户端操作是很关系到权限问题的,就需要确定一下客户端的真实有效性.如果只是一般的登录信息,不涉及修改业务数据,则可以不去验证,需要时才进行验证.
以前的做法是将username跟某些字符串结合加密,也将这个結果设置为Cookie,当拿回username时同时拿到那个加密值,再验证是否一致.
但是这个加密的字符串客户端就没法伪造了吗?应该至少没有那么容易吧.

还是回到怎样设置跟读取Cookie的问题上来
[b](1).设置Cookie[/b]
构造Cookie:
Cookie cookie = new Cookie(name, value);
这个时候可以考虑设置Cookie的path,maxAge,domain
cookie.setPath("/"); //在"/"路径下有效
cookie.setDomain(".iteye.com");
//在iteye.com域上设置这个cookie,其实这是跨域设置Cookie,经我测试是不能设置的,这样也对,别人的域怎么能让你乱设Cookie呢.默认就是设置服务器的URL.如果自己可以控制的域的话,比如自己域名的三级域名,就可以设置这个值,而且必须以"."开头

cookie.setMaxAge(-1);//默认值就是-1
//当maxAge是负数时,表示这个Cookie在浏览器关闭后消失
//当maxAge是0的话,表示删除这个Cookie
//当maxAge大于0时,表示这个Cookie存活的秒数,就算关闭浏览器后打开都有效
当完成了Cookie的构造配置,就应该写入到客户端了
response.addCookie(cookie);//这样就完成了写入

[b](2).获得Cookie[/b]
我们设置Cookie时是使用的键值对,所以获取时应该通过这个键才行
首先从request里拿到Cookie数组
Cookie[] cookies = request.getCookies();
循环这个数组拿到对应的Cookie
String name = "somekey";
Cookie cookie22 = null;
for(Cookie cookie: cookies){
if(name.equal(cookie.getName()){
cookie22 = cookie;
}
}
如果这个cookie不为null的话再取出相应的value值
String value = null;
if(cookie22 != null){
value = cookie22.getValue();
}


[b]总结[/b]
其实用java操作Cookie时还是设置Cookie那个地方最可能出错
特别是使用cookie.setDomain(domain);时
这个domain是不用考虑端口号的
还是尽量不要去设置domain,这样问题比较少
还有就是如果domain为null时而又执行cookie.setDomain(domain)可能会报错

[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值