在操作cookie的过程中走了一些弯路,cookie是不能跨域的,不过网上搜索到的函数,貌似能够跨域。于是在IE6和maxthon1.6上不断尝试,终于以失败告终.
<script type="text/javascript">
function setCookie(name,value,expiry,path,domain){
var nameString = name +"='"+ value+"'";
var expiryString = (expiry == null)?"" : ";expires ='" + expiry.toGMTString()+"'";
var pathString = (path == null) ? "":";path ='" + path+"'";
var domainString = (domain == null)?" ":";domain ='" + domain+"'";
var cookies=nameString + expiryString + pathString + domainString;
document.cookie = cookies;
}
</script>
上述函数中,如果传入了domain和path的值,cookie都设置不成功:
var d=new Date(2008,12,31);
setCookie("test","test",d,"/ExampleApp",null);
setCookie("test2","test2",d,"/help",null);
setCookie("test2","test3",d,"/help",www.test.com.cn);
//-------------------------------
setCookie("test4","test4",d,null,null);
java的servlet中也是如此:
Cookie test5=new Cookie("test5","test1");
test5.setDomain("www.test1.com.cn");
test5.setPath("/help") ;
test5.setMaxAge(24*60*60);
response.addCookie(test5) ;
Cookie test6=new Cookie("test6","test6");
test6.setDomain(request.getServerName());
test6.setPath(request.getServletPath()) ;
test6.setMaxAge(24*60*60);
response.addCookie(test6) ;
//---------------------------
Cookie test7=new Cookie("test7","test7");
test7.setMaxAge(24*60*60);
response.addCookie(test7) ;
Cookie test8=new Cookie("test8","test8");
test8.setMaxAge(24*60*60);
response.addCookie(test8) ;
设置了path和domain也没有报错,但是这个cookie就没有了。因此上述语句只成功设置了test4、test7、test8这三个cookie的值.下面是后台可以读取到的cookie的各个属性的值,等号前面是属性名称,等号后面是属性的值.:
DEBUG (CookieServlet.java:29) - name=test4,value='test4',domain=null,path=null
DEBUG (CookieServlet.java:29) - name=test7,value=test7,domain=null,path=null
DEBUG (CookieServlet.java:29) - name=test8,value=test8,domain=null,path=null
DEBUG (CookieServlet.java:29) - name=JSESSIONID,value=1ABAF39C37AD75BAE09435DE45239AEA,domain=null,path=null
这份代码应该是正确的了 :-)
/**
* setCookie
* 如果多次调用,每次传入不同的sName,就可设置多个cookie的值
*/
function setCookie(sName,sValue,dExpiry){
var sNameString = sName +"="+escape(sValue);
var sExpiryString = (dExpiry == null)?"":";expires =" + dExpiry.toGMTString();
document.cookie = sNameString + sExpiryString ;
}
// Retrieve the value of the cookie with the specified name.
function getCookie(sName){
// cookies are separated by semicolons
var aCookie = document.cookie.split(";");
for (var i=0; i < aCookie.length; i++){
// a name/value pair (a crumb) is separated by an equal sign
var aCrumb = aCookie[i].split("=");
if (sName == aCrumb[0])
return unescape(aCrumb[1]);
}
// a cookie with the requested name does not exist
return null;
}
// Delete the cookie with the specified name.
function delCookie(sName){
var sValue="delete";
document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}
分享到:
相关推荐
在这个项目中,我们利用SpringBoot框架来实现基于Cookie的SSO。下面将详细解释这个项目的实现原理、流程以及涉及的关键技术。 一、SpringBoot与SSO结合 SpringBoot以其简洁的配置和强大的功能深受开发者喜爱,是...
5. **安全策略**:XXL-SSO 还包含了各种安全措施,如票据加密、过期策略等,以防止非法攻击和恶意操作。 在"xxl-sso-master.zip"压缩包中,包含的就是XXL-SSO 的源代码和相关配置文件,开发者可以深入研究其内部...
- **服务端步骤与代码对应**:为了确保SSO过程的透明性和可追踪性,开发者需要在服务端代码中明确标注每一步操作的具体实现,包括Cookie的写入时机、URL参数的设置等,这有助于理解和调试整个SSO流程。 ##### 2. ...
**SSO-Server**:用户登录和注销操作在此进行,通常采用Form认证。登录成功后,SSO-Server会为每个SSO-Client分配一个唯一的Token。Token包含用户身份信息,且被安全地存储和管理。 b. **SSO-Client**:当用户...
JavaScript提供了对Cookie的读写支持,使得开发者能够在客户端直接操作Cookie。 **4.1 获取所有Cookie** ```javascript // 获取所有cookie var cookies = document.cookie; ``` **4.2 设置Cookie** ```...
该解决方案的设计流程图将会详细介绍 SSO 的实现机制、时序图、数据库设计、程序实现和修改、Cookie 和 Redis 的使用、相关 API 提供给其他业务的需要等方面的知识点。 设计流程图 SSO 单点登录解决方案的设计流程...
使用Redis的优势在于它的高速读写能力和内存中的数据操作,能有效减少数据库的负载。 登录方式上,该系统支持cookie和token两种方式。Cookie是一种常用的身份标识机制,服务器将sessionID通过cookie发送给客户端,...
在本项目中,"单点登录&单点登出(Cookie+ticket)"是通过Servlet技术实现的,利用Cookie和Ticket这两种机制来处理SSO的过程。 Cookie是Web应用中用于跟踪用户状态的一种常见方法。在SSO场景下,当用户首次登录SSO...
Kisso是一个基于Cookie的轻量级SSO中间件,它简化了SSO的实施过程,尤其是对于那些不熟悉复杂认证流程的开发者来说,Kisso的低代码特性使其变得更加友好。 Kisso的工作原理大致如下: 1. 用户首次访问系统A时,...
它执行以下操作: 删除所有x-frame-options响应标头删除所有content-security-policy响应标头更改所有set-cookie响应标头以设置SameSite=None (这也需要为cookie设置Secure标志) 如果sec-fetch-dest请求标头等于...
- **Cookie与Session**:在SSO中,Cookie通常用于存储票据,而Session则用于服务器端保存用户状态。 - **单点登出(SLO)**:与SSO相对应,用户登出一次即可从所有关联系统中退出,保持安全性。 3. SSO实现架构:...
在SSO场景中,它负责处理用户的登录请求,生成和验证票据(如JWT或Cookie)。 2. **MySQL与JPA**: MySQL是一个广泛使用的开源关系型数据库管理系统,用于存储用户信息和会话数据。JPA(Java Persistence API)是...
CAS-SSO的请求处理流程涉及多个步骤,包括子系统拦截器的介入、与中心服务器的交互、以及登录和注销的具体操作。当用户通过URL请求访问子系统时,拦截器首先检查是否存在有效的ticket(一种临时授权凭证)。若存在,...
10. **扩展性与兼容性**:随着业务发展,可能需要支持更多的应用系统,或者与其他SSO系统互操作。设计时应考虑到扩展性和兼容性,如采用标准协议,提供API接口等。 以上是SSO单点登录在Java环境中的主要技术和知识...
1. **基于Cookies实现**:这种方法通常用于同域下的应用之间,通过共享Cookie来实现单点登录。然而,这种方法在跨域环境下可能会遇到限制。为了克服这一问题,可以采用数据库等方式存储用户的会话信息。 2. **...
SSO是指用户在一个应用系统中登录后,可以无感知地访问所有相互信任的应用系统,而无需重新登录。在Web环境中,由于同源策略的限制,跨域访问需要特殊的处理。CDSO就是针对这种需求提出的解决方案。 CDSO的实现通常...
在本文中,我们将深入探讨如何使用cookie和JSONP(JSON with Padding)技术来实现跨域的SSO登录。 一、SSO原理与流程 1. **用户首次访问**:当用户尝试访问一个应用(例如SSOWebDemo1或SSOWebDemo2)时,如果未...
SSO的核心思想是将用户的身份认证过程与业务操作分离。通常情况下,SSO系统包括以下组件: 1. **身份认证中心**:负责用户的登录认证,以及颁发、管理凭证(Ticket)。 2. **服务提供者**:即各个具体的应用系统,...
### SSO導入ガイド #### 本书的目的 本书旨在为单点登录(Single Sign-On,简称SSO)的导入提供入门级的介绍与指导。...无论是从安全性的角度还是从操作效率的角度来看,SSO都是一项值得投资的技术。