如何验证ajax请求的cookie有效性?

浏览器中后台发起的一个异步ajax请求,服务器做响应时,附带了cookie信息,那么后续对同域名下其他页面请求时,该cookie是否有效,会一并随请求提交到web服务器呢?

自己是对web相关的标准不熟,只知道在普通前台请求时这种cookie会有效,对ajax请求的情况就暂时不确定。但想知道该问题的答案究竟是什么,去翻阅相关的标准是远水救近火。本着It's easier to check than to guess的原则,决定先写段程序来验证这个问题。相关代码如下

发起ajax请求的html页面test.html的代码为

<script type="text/javascript" src="lib/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
$.get('/api/async', function(result){
    window.location.href=result.url;
}, 'json')
</script>

后台'/api/async'服务程序的代码为

import web
import json

class async:
    def GET(self):
        web.setcookie('web', 'python')
        return '{"url": "/api/index"}'

class index:
    def GET(self):
        cookies = web.cookies()
        return json.dumps(cookies)
        
routes = (
    '/api/async', 'async',
    '/api/index', 'index'
)

app = web.application(routes, globals(), False)
app.run()

我们用先访问test.html页面,在其中触发异步ajax访问'/api/async',如代码所示,其响应结果有cookie信息,并且body是json数据,有一个url为'/api/index',test.html在收到响应后就前台跳转访问该url,'/api/index'服务响应中会将所有的cookie信息原样返回给浏览器。

对比'api/index'返回的结果与'/api/async'中设置的cookie,就可以知道前面问题的答案了,实际验证结果如下图所示


可以看出,ajax异步请求'/api/async'的响应中设置的cookie,对后续其他其他前台页面的请求是有效的

Ajax跨域请求COOKIE无法带上的解决办法

原生ajax请求方式:

var xhr = new XMLHttpRequest();  
xhr.open("POST", "http://xxxx.com/demo/b/index.php", true);  
xhr.withCredentials = true; //支持跨域发送cookies
xhr.send();

jquery的ajax的post方法请求:

 $.ajax({
               type: "POST",
               url: "http://xxx.com/api/test",
               dataType: 'jsonp',
               xhrFields: {
                      withCredentials: true
              },
            crossDomain: true,

           success:function(){

     },

           error:function(){
    }
})

服务器端设置:

header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://www.xxx.com");

时间: 2024-10-02 13:17:01

如何验证ajax请求的cookie有效性?的相关文章

web前端-ajax请求如何携带cookie

问题描述 ajax请求如何携带cookie 想通过ajax请求访问某网站,需要携带上指定cookie, 网上百度一下,知道不能直接设置cookie,但是说可以在ajax请求之前设置写cookie来实现 这样发送的报文头中就会包含cookie document.cookie=mycookie; var xhr=new XMLHttpRequest(); xhr.onreadystateChange=parseCookies; xhr.open("GET","http://192

asp.net 中 通过ajax请求一般处理程序,可是请求头中的cookie

问题描述 asp.net 中 通过ajax请求一般处理程序,可是请求头中的cookie asp.net 中 通过ajax请求一般处理程序,可是请求头中的cookie只有一条 ,请问大侠们,cookie有限制吗?我并没有跨域请求啊 解决方案 asp.net Ajax Post 请求 一般处理程序 解决方案二: cookie 里边存储的是两个键值对,可是请求头中只携带了一个键值对.不知道为什么 解决方案三: cookie 里边存储的是两个键值对,可是请求头中只携带了一个键值对.不知道为什么 解决方案

用Dojo实现Ajax请求:XH“.NET研究”R、跨域、及其他

在任何浏览器上方便地实现Ajax请求是每一个Ajax框架的初衷.Dojo在这方面无疑提供了非常丰富的支持.除了XMLHttpRequest之外,动态script.iframe.RPC也应有尽有,并且接口统一,使用方便,大多数情况下都只需要一句话就能达到目的,从而免除重复造轮子的麻烦.而且,Dojo一贯追求的概念完整性也在这里有所体现,换句话说,在使用Dojo的Ajax工具的过程中不会感到任何的不自然,相反更容易有触类旁通的感觉,因为API的模式是统一的,而且这里涉及到的某些概念(如Deferre

一起谈.NET技术,用Dojo实现Ajax请求:XHR、跨域、及其他

在任何浏览器上方便地实现Ajax请求是每一个Ajax框架的初衷.Dojo在这方面无疑提供了非常丰富的支持.除了XMLHttpRequest之外,动态script.iframe.RPC也应有尽有,并且接口统一,使用方便,大多数情况下都只需要一句话就能达到目的,从而免除重复造轮子的麻烦.而且,Dojo一贯追求的概念完整性也在这里有所体现,换句话说,在使用Dojo的Ajax工具的过程中不会感到任何的不自然,相反更容易有触类旁通的感觉,因为API的模式是统一的,而且这里涉及到的某些概念(如Deferre

一个简单的AJAX请求类

ajax|请求   在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把XMLHttpRequest请求封装到一个类里面,用起来方便多了,不用记那么多代码,什么创建XMLHttpRequest对象什么的,这部分代码也是重用性比较高的-已经打包,在日志的末尾下载. 要看效果的话点开侧边栏里的日志搜索,里面有一个无刷新搜索,就是了,或者在阅读日志或留言簿里的注册码那里有即时检测,如果不输入验证码或者输错了验证码,输入框都会变红的' 类名:AJAXRequest 创建方法:va

PHP判断一个请求是AJAX请求还是普通请求

在PHP程序中,如何判断一个网页请求是ajax请求还是普通请求?我们在做项目中经常会存在这样一个问题,在浏览器中直接输入我ajax提交的地址后,浏览器就能直接请求数据并将数据打印到页面上.从程序的严谨性上和安全上来说,我觉得这样非常不好. 但是由于水平有限,这个问题直到今天才被我解决,特此留下文章以供有此需要的人学习. 首先说说原理:在发送ajax请求的时候,我们可以通过XMLHttpRequest这个对象,创建自定义的header头信息,如果您使用的是原生的ajax方法,也就是未使用jquer

html+js+php一次原始的Ajax请求示例

 虽然jquery的ajax要比原始的写法容易得多,我们还是应该了解原始的写法,下面有个不错的示例,大家可以参考下 今天给大家呈现一个原始的Ajax请求过程,虽然jquery的ajax要比原始的写法容易得多,我们还是应该了解原始的写法,下面我分为html.js.php三个小文件来展示,数据库自己写.    首先是html:   代码如下: <html>  <head>  <meta http-equiv="Content-Type" content=&qu

spring mvc ajax请求数据后,前台根据返回的key如果跳转的别的jsp界面

问题描述 spring mvc ajax请求数据后,前台根据返回的key如果跳转的别的jsp界面 根据返回的data,在jsp前端进行跳转,有没有好的办法,还是可以通过配置就可以实现: window.location不太好使,可以跳转但是URL地址会显示具体的参数: 解决方案 参数你都放action里面了...那肯定显示了..fm表单放一个隐藏域存储你的cardList参数 <form id="fm" action="${}.../cardlist">&

ajax请求总是不成功?浏览器的同源策略和跨域问题详解

场景 码农小明要做一个展示业务数据的大屏给老板看,里面包含了来自自己网站的数据和来自隔壁老王的数据. 那么自己网站的数据提供了 http://xiaoming.com/whoami 这样的数据接口 隔壁老王提供了 http://oldwang.com/isdad 这样的数据接口 单独点开都是没有问题的.但是一使用 js 的 ajax 请求就无法收到来自 oldwang.com 的数据了. 点开浏览器控制台一看,红字标出(Chrome): XMLHttpRequest cannot load ht