`
starbhhc
  • 浏览: 654435 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

jsonp跨域设置cookie以及获取cookie

 
阅读更多

A项目:

<script type="text/javascript">

jQuery(document).ready(function(){

     $.ajax({

        type : "get",

        async:false,

        url : "http://www.b.com/user/checkUserName.htm",

        dataType : "jsonp",

        jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)

        jsonpCallback:"successCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名

        data: "", //请求数据   

        timeout:2000,

        success:function(data){

            if(data.retCode!="" &amp;&amp; data.retCode!="1" ){

              window.location="${base}/login/ssoLogin.jhtml?data="+data.body.data;

            }else{

                window.location="${base}/index.jhtml";

            }

        },

        error:function(){

            window.location="${base}/index.jhtml";

        }

    }); 

});

 

</script>

 

 

1.请求B项目为servlet,获取cookie,checkUserName为:

 

 

protected void processGet(HttpServletRequest request,

HttpServletResponse response, ServiceSession serviceSession)

throws Throwable {

AppData  data=new AppData(); 

Map&lt;string object&gt; bodyMap=new LinkedHashMap&lt;string object&gt;();

PrintWriter out = response.getWriter();

response.setContentType("text/javascript");

response.setCharacterEncoding("UTF-8");

try {

String cookieValue = "";

Cookie[] cookies = request.getCookies();

if(cookies != null){

for(Cookie cookie : cookies) {

if(cookie.getName().equals(Constant.cookieName)) {

cookieValue = cookie.getValue();

break;

}

}

}

response.setHeader("Content-type", "text/javascript");

response.setHeader("Access-Control-Allow-Origin","*");  //支持全域名访问,不安全,部署后需要固定限制为客户端网址

response.setHeader("Access-Control-Allow-Methods","GET,OPTIONS,DELETE"); //支持的http 动作

response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");  //响应头 请按照自己需求添加。

response.setHeader("P3P","CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");

if(cookieValue!=""){

data.setRetCode("0");

bodyMap.put("data", cookieValue);

data.setBody(bodyMap);

}else{

data.setRetCode("1");

}

out.print("successCallback("+JSON.toJSONString(data)+")");

} catch (Exception e) {

e.printStackTrace();

}

 

}

 

 

B项目访问A:

 

<script type="text/javascript">

$(document).ready(function(){

alert(getCookie("FRONT"));

if(getCookie("FRONT")==""){

  $.ajax({

      type : "get",

      async:false,

      url : "http://starbhhc.wicp.net/FYJF/ssoLogin/checkUserName.jhtml",

      dataType : "jsonp",

      jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(默认为:callback)

      jsonpCallback:"successCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名

      data: "", //请求数据   

      timeout:2000,

      success:function(data){

      if(data.retCode!="" &amp;&amp; data.retCode!="1"){

      setCookie("FRONT",data.body.data);

      window.location="http://117.39.28.230:8102/user/platformLogin.htm?data="+data.body.data;

          }

      },

      error:function(){

      }

  });

}

  

});

 

 

function setCookie(name,value)

{

document.cookie=name+'='+value;

}

 

function getCookie(name)

{

var arr=new Array();

arr=document.cookie.split(";");

var i=0;

for(i=0; i&lt;arr.length;i++)

{

arr2=arr[i].split("=");

if(arr2[0]==name)

{

return arr2[1];

}

}

  return '';

}

 

$(document).ready(function(){

 $('.flexslider').flexslider();

})

</script>

 

 

A项目为springMVC,获取A的cookie, checkUserName类为:

@RequestMapping(value = "/checkUserName", method = RequestMethod.GET)

public @ResponseBody void checkUserName(HttpServletRequest request,HttpServletResponse response) {

AppData  data=new AppData(); 

Map&lt;string object&gt; bodyMap=new LinkedHashMap&lt;string object&gt;();

String cookieValue = "";

try {

Cookie[] cookies = request.getCookies();

if(cookies != null){

for(Cookie cookie : cookies) {

if(cookie.getName().equals(Constant.cookieName)) {

cookieValue = cookie.getValue();

break;

}

}

}

response.setHeader("Content-type", "text/javascript");

response.setHeader("Access-Control-Allow-Origin","*");  //支持全域名访问,不安全,部署后需要固定限制为客户端网址

response.setHeader("Access-Control-Allow-Methods","GET,OPTIONS,DELETE"); //支持的http 动作

response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");  //响应头 请按照自己需求添加。

response.setHeader("P3P","CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");

if(cookieValue!=""){

data.setRetCode("0");

bodyMap.put("data", cookieValue);

data.setBody(bodyMap);

}else{

data.setRetCode("1");

}

response.getWriter().print("successCallback("+JSON.toJSONString(data)+")");   

} catch (IOException e) {

e.printStackTrace();

 

}

 

 

 

分享到:
评论

相关推荐

    ajax跨域CORS方案 JSONP跨域请求方案.zip

    跨域限制是浏览器为了安全原因而设置的一种机制,防止恶意网站通过脚本访问其他站点的数据。本文将深入探讨两种主要的跨域解决方案:CORS(Cross-Origin Resource Sharing)和JSONP(JSON with Padding)。 ### ...

    jsonpajax跨域请求

    "jsonp跨域请求"可能是服务器返回的示例数据,模拟了JSONP的跨域请求过程。 总结,JSONP和CORS是解决JavaScript跨域问题的两种主要方法,它们各有优缺点,适用于不同的场景。JSONP简单易用,但安全性较低;CORS则更...

    跨域访问解决方案,关于跨域访问cookie的资料

    ### 跨域访问解决方案与Cookie处理 在现代Web开发中,跨域问题一直是困扰开发者的一大难题。当浏览器出于安全考虑阻止不同源之间的数据交互时,跨域问题便产生了。为了解决这一问题,并确保在跨域场景下可以正确地...

    跨域获取cookie,多个网站实现一键登录.docx

    总结来说,跨域获取Cookie是通过JSONP机制实现的,主要涉及A网站提供接口读取Cookie,B网站通过Ajax请求获取并设置Cookie。这种方法简化了用户在多个关联网站之间的登录流程,但同时也需要考虑安全问题,避免用户...

    jsonp跨域

    JSONP(JSON with Padding)是一种跨域数据交互协议,它利用了浏览器的同源策略限制的漏洞,通过动态创建`&lt;script&gt;`标签来实现跨域请求。这种技术在早期的Web开发中非常常见,特别是在AJAX无法直接进行跨域请求的...

    跨域获取cookie,多个网站实现一键登录.pdf

    整个流程的关键在于利用了浏览器对同一站点下的Cookie共享机制,以及JSONP解决跨域请求的限制。这种方法的一个潜在安全风险是,如果A网站的`getcookies.php`接口没有做好安全防护,可能会被恶意利用,导致用户信息...

    跨域访问

    在源码分析层面,开发者需要理解如何在服务器端设置合适的CORS响应头,以及如何在客户端正确构造跨域请求。对于工具,一些现代化的前端构建工具(如Webpack、Rollup等)通常内置了代理服务器功能,可以帮助开发者...

    asp.net(C#)跨域及跨域写Cookie问题

    //www.A.com里通过ajax调用www.B.com里的内容时,是跨域访问,需要使用jsonp,为配合其工作需要添加下面两句,生成jsonp返回 context.Response.ContentType = “text/plain”; context.Response.Write(string.Format...

    跨域解决方案

    今天,我们主要讨论 jsonp 跨域和 document.domain + iframe 跨域这两种解决方案。 Jsonp 跨域 jsonp 是一种常见的解决方案,通常用于减轻 web 服务器的负载。我们可以通过动态创建 script 标签,请求一个带参数的...

    SSO单点登陆实现 cookie + jsonP 实现夸域单点登陆

    - **浏览器**:自动处理cookie,同时通过JavaScript实现JSONP请求,跨域获取用户信息。 三、安全性考虑 1. **加密令牌**:为了防止中间人攻击,令牌应经过加密处理,只有认证中心能够解密。 2. **时效性**:设置...

    Ajax跨域访问Cookie丢失问题的解决方法

    因此,即使服务端已经设置了Cookie,前端也无法获取到。 为了解决这个问题,我们可以采用以下几种方法: 1. JSONP(JSON with Padding)方法: JSONP是一种传统的跨域解决方案。通过动态创建script标签,并将其...

    学习总结:前端跨域请求的解决办法——JSONP

    综上所述,JSONP是前端跨域请求的一种常见手段,尤其适用于简单的数据获取场景。然而,随着CORS的普及,JSONP在复杂场景下的使用逐渐减少。在实际开发中,根据项目的具体需求选择合适的跨域策略是非常重要的。

    php跨域cookie共享使用方法

    总的来说,PHP跨域Cookie共享是通过在主域设置Cookie时指定目标域,并在目标域中正确读取Cookie来实现的。需要注意的是,这可能会带来一些安全风险,因为跨域设置Cookie可能导致敏感信息泄露。因此,务必谨慎使用,...

    ie7下利用ajax跨域盗取cookie的解决办法

    在IE7浏览器环境下,利用AJAX技术跨域盗取cookie的操作涉及了Web安全性的敏感问题。cookie是服务器为了标识用户身份而存储在用户浏览器中的小文件,通常包含敏感信息,如登录凭证、偏好设置等。跨域问题是指出于安全...

    ajax跨域获取数据

    - 客户端:发起Ajax请求时,设置XMLHttpRequest对象的withCredentials属性为true,表示需要携带cookie进行跨域请求。 - 服务器端:在返回的HTTP响应头中添加Access-Control-Allow-Origin、Access-Control-Allow-...

    基于C#后台调用跨域MVC服务及带Cookie验证的实现

    解决跨域问题有多种方式,如JSONP(JSON with Padding)、CORS(Cross-Origin Resource Sharing)和代理服务器。本文将重点介绍通过C#后台服务作为代理,处理跨域MVC服务调用并携带Cookie验证的实现。 【C#后台服务...

    06课 跨域、jsonp与cors.rar

    本课程将深入探讨如何突破这一限制,实现跨域通信,主要涉及三个关键技术:JSONP、CORS(跨源资源共享)以及它们在HTML中的应用。 首先,让我们理解什么是“跨域”。同源策略规定,一个域下的文档或脚本只能读取...

    什么是跨域解决方案有哪些.docx

    通过 jQuery 的 ajax 方法,可以设置 dataType 为 jsonp,实现跨域通信。 3)vue.js: 通过 Vue.js 的 jsonp 方法,可以实现跨域通信。 后端 node.js 代码示例: 通过 Node.js 可以创建一个 HTTP 服务器,处理...

Global site tag (gtag.js) - Google Analytics