首页
壁纸
友情链接
留言板
读者墙
关于博客
网站统计
更多
免责声明
推荐
工具箱
在线音乐
小霸王
小黑屋
栅格之地
WIKI
Search
1
Typecho博客主题Joe7.7.1美化优化记录【持续更新】
1,528 阅读
2
给你网站博客的评论添加一键打卡功能
1,349 阅读
3
博客美化和优化过程记录及实用技巧【停止更新】
1,232 阅读
4
php报错open_basedir restriction in effect问题和TP5的think-log-viewer
1,229 阅读
5
聊聊rel=external nofollow和rel=noopener noreferrer
1,030 阅读
编程相关
WEB前端
网站建设
生活随笔
经验分享
登录
Search
标签搜索
博客美化
经验分享
网站优化
Joe主题
php
css
typecho
javascript
html
external
nofollow
noopener
ajax
session
跨域
thinkphp
animation
cdn
七牛云
宝塔
小天
累计撰写
21
篇文章
累计收到
227
条评论
首页
栏目
编程相关
WEB前端
网站建设
生活随笔
经验分享
页面
壁纸
友情链接
留言板
读者墙
关于博客
网站统计
免责声明
推荐
工具箱
在线音乐
小霸王
小黑屋
栅格之地
WIKI
搜索到
1
篇与
ajax
的结果
2024-02-27
什么是跨域?session如何共享?PHP和Ajax跨域问题的解决方法
{message type="warning" content="什么是跨域?"/}跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。所谓同源是指,域名,协议,端口均相同,只要有一个不同,就是跨域。http://www.xtboke.com/index.html 调用 http://www.xtboke.com/api.php (非跨域)http://www.xtboke.com/index.html 调用 http://www.xtboke2.com/api.php (主域名不同:xtboke/xtboke2,跨域)http://tool.xtboke.com/index.html 调用 http://music.xtboke.com/api.php (子域名不同:tool/music,跨域)http://www.xtboke.com:8080/index.html 调用 http://www.xtboke.com:8081/api.php (端口不同:8080/8081,跨域)http://www.xtboke.com/index.html 调用 https://www.xtboke.com/api.php (协议不同:http/https,跨域){message type="info" content="localhost和127.0.0.1虽然都指向本机,但也属于跨域。"/}{message type="warning" content="解决办法"/}跨域的解决办法有很多,本文主要分享一下通过设置Access-Control-Allow-Origin来实现跨域。例如:客户端的域名是client.xtboke.com,而请求的域名是server.xtboke.com。如果直接使用ajax访问,会有以下错误:XMLHttpRequest cannot load http://server.xtboke.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://client.xtboke.com' is therefore not allowed access.{message type="info" content="1.允许单个域名访问"/}指定某域名(http://client.xtboke.com)跨域访问,则只需http://server.xtboke.com/api.php文件头部添加如下代码: header('Access-Control-Allow-Origin:http://client.xtboke.com');{message type="info" content="2.允许多个域名访问"/}指定多个域名(http://client1.xtboke.com、http://client2.xtboke.com等)跨域访问,则只需在http://server.xtboke.com/api.php文件头部添加如下代码:$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array('http://client1.xtboke.com', 'http://client2.xtboke.com' ); if(in_array($origin, $allow_origin)){header('Access-Control-Allow-Origin:'.$origin);}{message type="info" content="3.允许所有域名访问"/}允许所有域名访问则只需在http://server.xtboke.com/api.php文件头部添加如下代码:header('Access-Control-Allow-Origin:*');{message type="warning" content="SESSION共享问题:"/}下面是我整理的一份PHP session跨域共享的代码示例,记录一下。client.php tool.xtboke.com<?php header("Content-Type:text/html;charset=utf-8"); *session_start(); $token = md5(uniqid(rand(), TRUE)); $_*SESSION["token"]=$token; ?> <script src="//www.xtboke.com/jquery/jquery-1.9.1.js"></script> <script type="text/javascript"> $.ajax({ type:'get', url: "https://www.xtboke.com/server.php", dataType: "jsonp", jsonp:'callback', data:{ 'cToken':"<?php echo $_*SESSION['token'];?>" }, xhrFields: {withCredentials: true}, crossDomain: true, success: function(data) { $(".info").html("客户端token:" + data.cToken + "<br/>服务端token:" + data.sToken+"<br/>是否相等:" + data.ifEq); } }); </script> <div class="info"></div>server.php music.xtboke.com<?php session_*start(); $origin = isset($_SER*VER['HTTP_*ORIGIN'])? $_SER*VER['HTTP_*ORIGIN'] : ''; $allow_origin = array( 'https://tool.xtboke.com', 'https://tool2.xtboke.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); //跨域且使用session时不能使用 * header("Access-Control-Allow-Credentials: true" );//是否携带cookie } $arr = array( 'cToken'=>$_*GET['cToken'], 'sToken'=>$_*SESSION['token'], 'ifEq'=>$_*SESSION['token']==$_*GET['cToken']?'yes':'no' ); $callback = !empty($_*GET['callback']) ? trim($_*GET['callback']) : ''; if(!empty($callback)) { echo $callback."(".*json_encode($arr).")"; }else{ echo *json_encode($arr); }
2024年02月27日
794 阅读
2 评论
14 点赞