phpcookie跨域
1. php cookie 两个一级域名如何共享
cookie存储的策略中,是不允许跨域的,两个相同的一级域名,不同的二级域名,可以通过同时指定document.domain允许跨域。
如果两个一级域名都不一样,那么客户端是不允许通信的,HTML5中Communication API允许跨文档跨域通信,但并不是所有浏览器都支持该特性。
因此建议你将需要共享的信息存储到服务器端,不同域的客户端才能访问。
2. cookie机制&跨域问题
推荐阅读
当用户第一次访问并登陆一个网站的时候,cookie的设置以及发送会经历以下4个阶段:
客户端发送一个请求到服务器
服务器发送一个httpResponse响应到客户端,其中包含set-cookie的头部
客户端保存cookie,之后向服务器发送请求时,httpRequest请求中会包含一个Cookie的头部
服务器返回响应数据
cookie的域名
Cookie是不可以跨域名的,隐私安全机制禁止网站非法获取其他网站的Cookie。
正常情况下,同一个以及域名下的两个二级域名也不能交互Cookie,比如test1.jianshu.com与test2.jianshu.com,因为二者的域名不完全相同,如果想要jianshu.com名下的二级域名都可以使用该Cookie,需要设置Cookie的domain参数为jianshu.com,这样使用test1.jianshu.com和test2.jianshu.com就能访问同一个域名了。
下面是Chrome浏览器存储的一个cookie信息
设置的过程,服务器设置cookie的时候,需要指定cookie的domain,当domain与当前host的匹配不上的时候,responseHeader里的set-cookie不会设置成功。这也就是cookie不支持跨域问题。
3. 跨域请求如何携带cookie不小心都拿了Offer
最近在参加面试找工作,陆陆续续的面了两三家。其中面试官问到了一个问题:如何解决跨域问题? 我巴巴拉拉的一顿说,大概了说了四种方法,然后面试官紧接着又问:那跨域请求怎么携带cookie呢?(常规的面试套路,一般都会顺着你的回答往深了问)由于之前的项目都是同源的,不牵涉跨域访问,所以一时没有回答出来,后来研究了下,所以有了这篇文章
阅读本文,你将学到:
思路:
先看下代码结构,相对比较的简单:
A 服务的代码:
index.html 的代码:
B 服务的代码:
首先我们先在 A 服务的 index.html 页面中得到一个 cookie ,运行 A 服务:
然后打开 http://localhost:8000/static/index.html : 没有问题的话,页面长这样:
这个时候 F12 打开控制台: 可以看到发送了一个 login 请求,并且设置了cookie,也可以选择浏览器控制台的 Application 页签,选中 cookie ,可以看到 cookie 的信息:
然后我们点击页面上的 发送同源请求 按钮,可以看到发送了一个user请求,并且已经携带上了cookie:
接下来刺激的画面来了,我们点击 发送跨域请求 按钮,出现了跨域请求的报错:
重点 : 接下来开始解决跨域携带cookie问题:
什么是withCredentials?
XMLHttpRequest.withCredentials 属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。
如果在发送来自其他域的XMLHttpRequest请求之前,未设置withCredentials 为true,那么就不能为它自己的域设置cookie值。而通过设置withCredentials 为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问。
这个时候再去发送一个跨域请求,你会发现依旧报错,但是我们仔细看下报错,意思是需要设置header的 Access-Control-Allow-Origin 属性:
我们修改 B (app2.js)服务的代码:
修改完之后再次发送一个跨域请求,你会发现,又报错了(接近崩溃),但是跟之前报的错不一样了,意思大概就是 Access-Control-Allow-Credentials 这个属性应该设置为 true ,但是显示得到的是个 '' :
再次修改B服务的代码(每次修改后需要重新运行):
再发送一个跨域请求:
可以看到,这个跨域请求已经请求成功并且返回数据了!而且也携带了A服务的cookie,这个时候已经大功告成了。
4. PHP如何跨域带cookie请求一个页面并输出或跳转
跨域最好用API,也就是把 cookie的值传到API数据页,再到b.com里读取即可。
5. PHP跨域获取COOKIE
在没有输出之前用:header('P3P:
CP="CURa
ADMa
DEVa
PSAo
PSDo
OUR
BUS
UNI
PUR
INT
DEM
STA
PRE
COM
NAV
OTC
NOI
DSP
COR"');就可以跨域取得cookie值。
6. thinkphp5 跨域验证码
假设
前端域名为: http://a.com
服务端域名为: http://b.com
前端页面地址为: http://a.com/index.html
获取验证码地址: http://b.com/home/verify
验证验证码地址: http://b.com/home/check_verify
事例:前台地址 http://a.com 要向服务端地址 http://b.com 验证和请求验证码
原理:因为在加载验证码图片的时候请求中携带了cooike,cooike中存了服务端验证码的PHPSESSID。而在验证过程中因为是跨域请求,ajax是不会携带cooike进行提交的。因此需要在ajax设置withCredentials为true时表示当前请求为跨域类型在请求中协带cookie,并且服务端也必须要设置Access-Control-Allow-Credentials:为true才可以起到实际的效果。
顺便贴一下进行请求和验证的两个方法:
7. php跨域的时候怎么謘ession不丢失
session_id 默认是由cookie 走http请求发送到服务器的
由于cookie是同源同域策略,所以跨域的时候session_id 无法带过去.可以把session_id 走GET传参的方式带过去.只要其他域名带上了相同的session_id 就能实现回话保持.
8. cookie怎么跨服务器 - PHP进阶讨论
说明,cookie是可以跨主机的,只要这些主机在同一个域下,但是cookie是不能跨域的
9. php 跨域删除cookie!急急急!!!
在www.b.com
里写个接口,如www.b.com/cookile/delete?name=name,
在www.a.com中调用接口删除Cookies。
10. PHP cookie跨域问题
注意你是否设置了setcookie函数的$domain参数。如果内网域名和你设置的不一样,就无法读取cookie。但cookie是能写进去的。
如果你用火狐浏览器,使用右键->查看页面信息->安全 来查看cookie内容。看看你的问题出在哪里。