在PHP中通过jquery发出ajax请求的同时维护$\会话数据?

在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

我正处于一个体面项目的最后阶段(至少对我来说),我遇到了一个问题,我的ajax请求没有将$\会话数据发送到它们正在加载的URL。我正在尝试使用Gdata自动上传你在YouTube上看到的文件。我使用jquery发出ajax请求,但是当我在名为PHP脚本的ajax中测试$_SESSION['sessionToken']时,我什么也没有得到

这是我的代码,调用YouTube上传脚本:

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>&nbsp;&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp; <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收到了!一旦我设置了会话,它就工作得很好。谢谢!