在PHP中通过jquery发出ajax请求的同时维护$\会话数据?
我正处于一个体面项目的最后阶段(至少对我来说),我遇到了一个问题,我的ajax请求没有将$\会话数据发送到它们正在加载的URL。我正在尝试使用Gdata自动上传你在YouTube上看到的文件。我使用jquery发出ajax请求,但是当我在名为PHP脚本的ajax中测试$_SESSION['sessionToken']时,我什么也没有得到 这是我的代码,调用YouTube上传脚本:在PHP中通过jquery发出ajax请求的同时维护$\会话数据?,php,jquery,ajax,session-cookies,gdata,Php,Jquery,Ajax,Session Cookies,Gdata,我正处于一个体面项目的最后阶段(至少对我来说),我遇到了一个问题,我的ajax请求没有将$\会话数据发送到它们正在加载的URL。我正在尝试使用Gdata自动上传你在YouTube上看到的文件。我使用jquery发出ajax请求,但是当我在名为PHP脚本的ajax中测试$_SESSION['sessionToken']时,我什么也没有得到 这是我的代码,调用YouTube上传脚本: function uploadVideos(id, upload, selected) { var
function uploadVideos(id, upload, selected) {
var status = document.getElementById('currentStatus');
var fields = upload[id].split(":", 2);
var token="<?php echo $_GET['token'];?>";
var dataString = 'videoId='+ fields[0]; // + '&token=' + token;
id++;
status.innerHTML = "<b>Videos for Upload:</b> <h3 class='status'>Currently Updating Bout #" + fields[1] + " (" + id + " of " + upload.length + " videos)</h3>";
$.ajax({
type: "GET",
url: "upload.php",
data: dataString,
success: function(txt) {
if (txt != 'Success') {
alert(txt);
}
if (id < upload.length) {
uploadVideos(id, upload, selected);
} else {
status.innerHTML = "<b>Videos for Upload:</b> <h3 class='status'>Completed</h3>";
}
//deselect the checkbox
document.videos.video[selected[id-1]].checked = false;
document.videos.video[selected[id-1]].style.display = 'none';
},
async: true
});
}
功能上传视频(id、上传、选定){
var status=document.getElementById('currentStatus');
var fields=upload[id]。拆分(“:”,2);
var token=“”;
var dataString='videoId='+字段[0];//+'&token='+token;
id++;
status.innerHTML=“上传视频:当前正在更新about#”+字段[1]+”(“+id+”of“+Upload.length+”视频)”;
$.ajax({
键入:“获取”,
url:“upload.php”,
数据:dataString,
成功:函数(txt){
如果(txt!=“成功”){
警报(txt);
}
if(id
我如何将sessionToken发送到upload.php,让它相信我已通过身份验证?首先:
您没有在Ajax调用中发送“token”变量。您正在发送不包含令牌变量的变量dataString。您已将令牌部分注释掉
var token="<?php echo $_GET['token'];?>";
var dataString = 'videoId='+ fields[0]; // + '&token=' + token;
var-token=”“;
var dataString='videoId='+字段[0];//+'&令牌='+令牌;
秒:
您只能通过POST或GET发送Ajax
在ajax调用中,您使用的是GET,因此您应该检查$\u GET;不是$\u会话。我可能在这里包含了更多非常有用的代码。我基本上只想在.ajax请求中添加类似“session:sessionString”的内容。如果不清楚,$\u会话中的任何内容都只在服务器上,而不在客户端上。您需要确保令牌是从浏览器发送的,通常是通过cookie发送的。我知道我有cookie。我可以回显“$\u会话['sessionToken']在我包含的脚本中,我看到了令牌的值。我也想将该值放在ajax请求的标题中,但我不知道如何做。如果会话中有令牌,则不必通过ajax请求发送。唯一需要发送的令牌是PHPSESSID,浏览器会自动执行该操作(使用cookie)。PHP在内部使用该sessiond来加载所有会话变量(包括“sessionToken”)每次执行时,无论是ajax调用还是常规请求。我都会注释掉GET标记,因为它是每个Gdata的一次性使用标记。我可以在一次上载时使用它,但后续上载将失败。您可以看到我的uploadVideos()函数是递归的,所以我需要能够多次调用它。Gdata需要使用会话令牌来实现这一点。我的请求仍然是GET或POST(在本例中为GET),但我应该能够设置cookie。对吗?尝试调用session_start()阅读$_SESSIONYa之前,请在upload.php中输入。我同意@Christian。您是否记得在需要访问会话的所有位置调用session_start()?Ajax仍应发送会话id,因为它是调用脚本的浏览器。Christian收到了!一旦我设置了会话,它就工作得很好。谢谢!