seven2000/
共4个网摘 [
1 ] |
访问seven2000的个人空间
seven2000收录,使用标签:jsp, cookie,时间:2008-7-23 21:58:31 | 相关网摘,我也收藏
jsp Cookie 读写中文 [ 原创 ] 收藏
新一篇: org.apache.xml.utils.WrappedRuntimeException: The output format must have a '{http://xml.apache.org/xalan}content-handler' property! | 旧一篇: 怎样看API帮助来学习Jakarta Common包[ 很简单很实用 ]
这个jsp创建读取Cookie,注意创建Cookie时必须注释setDomain()方法,
否则无法写入Cookie。本例子经过测试,绝对好用。
<%@page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page import=" cn.sintal.common.utility.MD5_hr"%>
<%@ page import="org.apache.commons.lang.StringUtils"%>
<%@ page import="cn.sintal.service.impl.front.U2LoginBo"%>
<%@ page import="java.net.URLEncoder,java.net.URLDecoder"%>
<%
//写Cookie
Cookie c = new Cookie("nnn", null);
//c.setDomain("sintal.cn");
c.setPath("/");
c.setMaxAge(7 * 24 * 60 * 60);
//MD5_hr md5hr = new MD5_hr();
//String md5EnCodePassword = md5hr.getMD5ofStr(password);
//U2LoginBo bo = new U2LoginBo();
String userID="中文";
String password = "111111";
String data = userID+"|"+password;
c.setValue(URLEncoder.encode(data,"UTF-8"));
//c.setValue(data);
response.addCookie(c);
//读Cookies
out.print("");
Cookie[] cookies = request.getCookies();
if (cookies != null) {
if (cookies.length > 0) {
for (int i = 0; i < cookies.length; i++) {
Cookie requestcookie = cookies[i];
out.print("damain="+requestcookie.getDomain() + ",name="
+ requestcookie.getName());
out.print("");
// 找到了登陆Cookie
if (requestcookie.getName().equals("nnn")) {
String userinfo = requestcookie.getValue();
String[] suaa = StringUtils.split(userinfo,"|");
out.print("★★finded HR Cookie了,uid=" + userinfo+"");
for( int j=0 ;j"+ttt+"");
}
out.print("");
// 删除此Cookie
requestcookie.setMaxAge(0);
response.addCookie(requestcookie);
}
}//end for
} //end if cookie.length>0
}
%>
http://blog.csdn.net/srx/archive/2006/02/15/599684.aspx
seven2000收录,使用标签:web, cookie,时间:2008-7-3 22:44:03 | 相关网摘,我也收藏
先说session
对SESSION的争论好象一直没有停止过,不过幺麽能理解SESSION的人应该占90以上。 但还是讲讲,别嫌老~ 。
有一些人赞成用SESSION,有一些人不赞成。但这个问题到底要怎么说。不妨听听我的看法。
如果有错误请不要朝丢东西,金条和硬币除外。
有些人应该知道我是做江湖程序的,而江湖程序做看中的就是效率,但这里不谈设计,而从一些比较实际的角度看SESSION。
首先要先说SESSION是干什么的,SESSION是可以存储针对与某一个用户的IE以及通过其当前窗口打开的任何窗口具有针对性的用户信息存储机制。为什么要这样说。看下边先研究SESSION是如何启动的,当打开IE以后浏览网站后会发出一个指令请求SESSIONID以及对各个类型数据的下载许可,如图片,声音以及FLASH。
数据实际传输内容:IE到服务器
GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language0: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: www.jh521.com
Connection: Keep-Alive
服务器会返回一个没有被使用的SESSIONID让IE使用,当时IE就对返回SESSIONID做存储并同时返回相关页面的下载数据,如下:服务器到IE
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Sun, 30 Nov 2003 16:41:51 GMT
Content-Length: 21174..Content-Type: text/html
Set-Cookie: ASPSESSIONIDCACBBBRT=IBOMFONAOJFEEBHBPIENJFFC; path=/
Cache-control: private
然后就是页面HTML代码
此时这个IE程序(不是客户机)的SESSIONID就为IBOMFONAOJFEEBHBPIENJFFC,而当IE在访问任何这个站点的ASP程序的时候,就会把IBOMFONAOJFEEBHBPIENJFFC发送给服务器,服务器就会知道IBOMFONAOJFEEBHBPIENJFFC是表示你而在服务器上设置SESSION("name")="name"完全可以看成是
SESSION("IBOMFONAOJFEEBHBPIENJFFC")("name")="name"
或者
SESSION(SESSIONID)("name")="name"
这样,SESSION就区分开用户了。
而当服务器反馈这个ID的时候会看这个ID有没有被使用。如果有在换一个
反正不会让你重复,如果想模拟某人的SESSION的ID来进行欺骗是可以的。不过要获取到对方IE传输信号,并且在保证当时这个SESSIONID没有被取消的情况下才可能实施。 不过要是我有那时间直接通过POST信号找他NAME和PASS了。我可不费这个劲。
想必一些人明白了了SESSIONID到底是如何工作的。
那么就在看看COOKIE,有人说SESSIONID就是COOKIE,按照技术上来讲他们不属于同类,但是属于一种工作模式,用户和服务器传输私有数据。
当我设置COOKIE的时候,服务器会反馈给IE一个指令。IE通过这个网络指令生成COOKIE并存放,在特定的时候会取得这个这个信息如在访问这个站点并且COOKID有效的时候。
那么为什么要用COOKIE而不用SESSION呢,看下区别
有效时间以及存储方式 传输内容
COOKIE 可设置并在本地保留 明码信息
SESSION 在IE不关闭并服务器不超时 只有SESSIONID
当如果想让用户下次登入网站不需要输入用户名或者密码的时候就只能用COOKIE, 因为他可以保留相当长的时间(在COOKIE记录被删除或者失效日期之前) 而SESSION就不可以,他不会保留太长时间,而且IE在关闭后就自动清除了SESSIONID记录,在下次登入的时候会请求新的SESSIONID。
而服务器想通过用户个人变量校验用户的状态的时候,就不能用COOKIE。如果用设置用户权限是USER。而IE访问的时候就把USER的明码传输到服务器。那么如果我通过一定手段,比如直接修改COOKIE记录,把USER修改成ADMIN呢~~ 就麻烦了。
但存储用户名和密码或者网站的配色方案这样的信息,用COOKIE是最好的。
好,有点累了,在说说这个东西 Request.ServerVariables("HTTP_REFERER")
我想有一些人通过这个Request.ServerVariables("HTTP_REFERER") 来进行一些关键性限制,特别是对付远程提交以及非法侵入。
那么我就要提醒下服务器取得的HTTP_REFERER信息完全是IE传输给服务器的,可以模拟,而且难度不大,用不到半个小时就可以用VB做出一个针对HTTP_REFERER入侵程序。
(可惜我原先那他没干正经事情,做WEB游戏挂机程序来的)
http://www.cftea.com/c/678.asp
seven2000收录,使用标签:web, cookie,时间:2008-7-3 15:05:44 | 相关网摘,我也收藏
Frameset引起的内部第三方站点cookie丢失的发现解决过程
关键字: Cookie P3P HTTP SSO
Frameset引起的内部第三方站点cookie丢失的发现解决过程
这段时间,开发一个门户网站的SSO集成,没想到最后部署时,被一个问题折磨了两天:在我机器上测试好的Java SSO服务器端应用和他们的PHP discuz论坛SSO集成时,总是Session丢失。
我的开发环境:
SSO应用负责登录和退出,以及账号同步的Web Services(REST方式),它部署在WebLogic8.14上,WebLogic上还有其它Java Web应用需要集成。Discuz论坛必须集成到SSO。
SSO部署到本机的WebLogic,并且php论坛也部署在本机。
客户那边的环境:
WebLogic和Discuz在不同的机器上,当然也是不同IP,或是不同域名。另外,他们的论坛在一个frameset里面。
本来家里测试完好,但在客户现场部署时,失败:登录成功后跳转总是显示未登录状态,但是,抛开frameset登录,有时候ok。
于是,回公司后,向客户要了他们的Discuz论坛的所有代码,因为第一次部署时,发现他们对论坛改动很大,代码发过来后,在本机部署,没有任何问题,包括frameset里面!
我当时怀疑是Weblogic两边环境有区别,不过差别很小,都是8.1*版本。于是,第二次我去了客户那边,并且带去了自己的笔记本,上面有开发测试好的程序。
到了客户那边,我就在他们那个安装了WebLogic服务器的机器上,再安装了一个我自己的Weblogic,一切安装、部署完毕:问题依然存在!
我一步步确定是frameset引起的问题。但是,登录时,有filter拦截跳转,登录Weblogic成功后跳转,登录Discuz passport后也跳转。问题全部搅混在一起,就很难确定问题究竟出在哪里。
后来,log出request.getRemoteUser,总是返回null,我基本上确定是session所必须的cookie丢失造成的,但为什么会丢失呢?不就是在一个frameset里面吗?不用frameset,确实不出问题。
但是,在本机测试时,无论用frameset与否,都不出问题啊?
反复推敲,估计是不同域名或IP,再加上frameset,就会出问题,但问题怎么描述呢?也就是说,什么具体的条件,会引起cookie丢失呢?
说实话,这个时候,最难的,就是确定真正的问题出在哪里。
于是,我google了一下:“frameset cookie”,竟然有很多人讨论!不久就基本上确认了我当时推测。IE6.0对W3C 关于cookie的P3P协议的支持,支持得有些荒唐,几乎成了bug。
我再用firefox测试了SSO登录和退出,一切ok!然后,设置一下IE的cookie隐私,也一切ok,不用对程序做任何改动。但是,总不能要求几十万用户这么做吧。
问题很快就得到了解决。
还是描述一下具体的问题吧:
在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏览器的。
那么,解决的办法,自然是对frame里面的第三方站点的response header里面添加一个确认信息,在MSDN里面有个最简单的解决办法:response.addHeader("P3P","CP=CAO PSA OUR")。
我当时是在可能的servlet的response里面添加,不过,最简单的办法,是用一个filter,对所有路径下的uri,都设置response.setHeader("P3P","CP=CAO PSA OUR")。
我自己单独测试时,发现只要有某个http header设置了上面那个header信息,以后cookie都会畅通无阻。但是,设置html的meta没用。
上面控制cookie的方法,和以前的方法很不一样。第一,它不是操作cookie本身。第二,它是在cookie之外控制cookie。第三,它不是set cookie,而是控制cookie是否随着请求发送(是否拦截cookie)。
下面几篇文章描述了这个问题,并且提出了解决方案:
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752 (解决方案)
http://msdn.microsoft.com/workshop/security/privacy/overview/privacyie6.asp (P3P和IE隐私关系)
http://www.castlecops.com/a837-P3P_in_IE6_Frustrating_Failure.html (评价非常有意思)
http://i.mop.com/wildlynx/blog/2007/08/14/4682284.html
seven2000收录,使用标签:web, cookie,时间:2008-7-3 15:05:21 | 相关网摘,我也收藏
Passport 一方面意味着用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去。坦白说,目前 sohu passport 在这一点实现的很烂(不过俺的工作就是要把它做好啦,hehe)
搜狐的 SSO 需求比较麻烦,因为它旗下有好多域名:sohu.com、chinaren.com、sogou.com、focus.cn、17173.com、go2map.com,登录用户漫游的主要障碍也来自于此。
以前亿邮的邮件系统在和别的系统整合的时候是提供一个 URL,用户从第三方系统里面点击这个链接就可以生成访问邮件界面所需的 cookie,然后进入邮件。这个方式的确很有效,但问题是:
1. 每个外部链接都必须用特殊的 URL 跳转,维护很麻烦
2. 两个系统集成已经很麻烦了,若是集成的系统有好几个,彼此都需要跳转而缺乏一个中心机制就成了噩梦
3. 根本无法处理用户直接在地址栏输入地址进行访问的情况
即使是跨域,上述的解决方法相对来说还是容易的。
A. 首先是所有登录必须首先通过一个中央服务器进行认证,然后在它那里给浏览器种下 cookie(下面称之为 sso cookie)
B. 当用户访问另外的域名 app 的时候,浏览器是无法直接发送 sso cookie 给服务器认证的。此时应该利用 javascript,动态创建一个隐藏的 爱生活,爱猫扑,让其访问 sso
C. 这个 爱生活,爱猫扑 的请求是可以把 sso cookie 送给 sso server 的。sso server 验证 cookie 后,返回一个重定向页面到 app 的某个 URL,由该 URL 设置 app cookie
D. 此时浏览器上可看见的页面容器实际上也是可以和重定向回来的内容交互的。比如可以用 js 控制发现重定向页面成功返回后,就刷新整个页面,让它看起来和用户登录后访问没有什么区别。
下面是真正的技巧:怎样才能在 IE 里面跨域去设置 cookie
上述技术看起来是不是很好?但它的前提是所有的登录都 post 到 sso server 上,认证成功后再返回 app 页面。可我接受到的需求之一就是要支持页面无刷新登录。
哈!就是说本来在 chinaren.com 上提交登录表单的 action 应该是 passport.sohu.com 这个 sso server。可是在 AJAX 大潮下,chinaren 计划采用 XMLHTTPRequest 提交,这个就麻烦了,因为是不能跨域来提交的。
那么解决方法就是跨域产生 cookie,即 js 发现口令校验成功后,再在 passport.sohu.com 上种上合法的 cookie.
套用上面的跨域读 cookie 的方案似乎很简单去推论:就是创建一个隐含的 爱生活,爱猫扑,让那个 爱生活,爱猫扑 去调用 passport.sohu.com 的 URL 来产生 cookie。很遗憾,此方法在 Fx 下工作的很好,但是不能在 IE 上应用。(在 IE 状态栏上显示 cookie 隐私警告,红色圆底白横杠)
我试了很多很多方法,包括创建 、 node,包括用 js 设置,但都一次次被 IE 无情的挡在了浏览器外。google 之,也没有任何真正可用的答案,中文网页要么介绍的方法是错的,要么说无解。
最后还是在 chinaren 一哥们的帮助下,翻出了他们所使用的,以和 alumni.sohu.com 交互的方法(不知道是哪位牛人发现的),只需要设置 P3P HTTP Header,在隐含 爱生活,爱猫扑 里面跨域设置 cookie 就可以成功。他们所用的内容是:
P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
最后是我做的一个小小的演示:cookie 怎么在 vmx.cn 和 dup2.net 之间交互
1. http://qiuyingbo.test.vmx.cn/cookie.php
2. 随便输入什么,点 reset cookie,就可以看到 vmx.cn 的 cookie 已经被设上了
3. 在该页面点连接到 http://www.dup2.net/vmx/cookie.html
4. 点"get corss-domain cookie" .. (此时 js 会去创建一个爱生活,爱猫扑,请求 qiuyingbo.test.vmx.cn ,返回页面把 cookie 值作为 GET 参数重定向回 dup2.net 的另外一个URL。)
5. 点 "display corss-domain cookie" .. 就可以看到 vmx.cn 的 cookie 了
6. 在该页面的输入框中输入其它的值,然后点 "set cross-domain cookie",该行为将主动设置 vmx.cn 的 cookie
7. 点链接回到 http://qiuyingbo.test.vmx.cn/cookie.php ,就可以看到新的值了
http://i.mop.com/wildlynx/blog/2007/08/14/4682357.html
共4个网摘 [
1 ]