繁体   English   中英

php,mySQL和AJAX:无法跨同一域中的脚本使用会话

php, mySQL & AJAX: Unable to use sessions across the scripts in the same domain

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下页面:page1.php,page2.php和page3.php。 他们每个人的代码如下

码:

page1.php

<script type="text/javascript">

$(function(){
    $('#imgID').upload({
        submit_to_url: "page2.php",
        file_name: 'myfile1',
        description : "Image",
        limit : 1,      
        file_types : "*.jpg",

    })
}); 

</script>

<body>
<form action="page3.php" method="post" enctype="multipart/form-data" name="frm1" id="frm1">
//Some other text fields
  <input type="submit" name="submit" id="submit" value="Submit" />
</form>

</body>

page2.php

<?php session_start();
$a = $_SESSION['a'];
$b = $_SESSION['b'];
$c = $_SESSION['c'];

$res = mysql_query("SELECT col FROM table WHERE col1 = $a AND col2 = $b AND col3 = $c LIMIT 1");
$num_rows = mysql_num_rows($res);
echo $num_rows; //echos 0 when in fact it should have been 1 because the data in the Session exists.

//Ok let's proceed further
//... Do some stuff...
//Store some more values and create new session variables (and assume that page1.php is going to be able to use it)
$_SESSION['d'] = 'd';
$_SESSION['e'] = 'e';
$_SESSION['f'] = 'f';

if (move_uploaded_file($_FILES['file']['tmp_name'], $file)) 
{ 
  echo "success"; 
} 
else 
{
 echo "error ".$_FILES['file']['error'];
}

?>

page3.php

<?php session_start(); 
if( isset($_POST['submit']) )
{
  //These sessions are non-existent although the AJAX request 
  //to page2.php may have created them when called via AJAX from within page1.php 
  echo $_SESSION['d'].$_SESSION['e'].$_SESSION['f']; ?> 
}
?>
  1. 如代码所示,我正在通过AJAX调用从page1.php到page2.php发布一些信息。 page2.php应该能够使用page1.php中的会话值,即$ _SESSION ['a'],$ _ SESSION ['b']和$ _SESSION ['c'],但不能。 为什么? 我怎样才能解决这个问题?

  2. 在完成一些处理并将响应发送回page1.php之后,page2.php将创建更多会话。 点击page1.php上的表单的提交按钮,页面将POST'ed到page3.php。 但是,当回显在page2.php中创建的SESSIONS信息时,它为空白,表示未使用来自page2.php的SESSIONS。 我怎样才能解决这个问题?

在查看以上结论之前,我查看了许多信息,并花了大约50个小时尝试对脚本进行不同的处理。 我的应用 是使用函数(不是OOPS)定制的,并且不使用任何PHP框架,由于我对OOP概念的了解受到限制,因此许多框架都是面向对象的,我什至不打算使用任何PHP框架。 我遇到了比赛条件,但是提供的解决方案并没有太大帮助。 我想到的最后一个解决方案是使用数据库来举行会话以及从数据库中查找和检索数据库,我真的想避免为任务创建表,编码和维护代码,就像在同一个域中跨页面保留会话一样简单。 。

所以我的要求是:在当前条件下,有没有一种方法可以通过简单的编码解决上述问题? 任何帮助表示赞赏。

谢谢。

编辑:另外,我在会议中包含敏感信息,无法使用GET或POST通过页面来回传递信息。 因此,使用SESSIONS对我真的很有帮助。 因此,如果有任何编码可以帮助我实现这一目标,那将非常有帮助。 谢谢。

2 个回复

从SWFUpload文档中:

Cookie问题

在Windows上,无论使用哪种浏览器,非IE Flash Player插件(FireFox,Opera,Safari等)都将发送IE cookie。 这破坏了许多服务器端脚本技术的身份验证和会话。

如果开发人员希望使用会话,则应手动传递会话和身份验证cookie信息,并在服务器端手动还原会话。

SWFUpload软件包包含用于PHP和ASP.Net的变通示例代码。

我怀疑SWFUpload会导致您的问题。

检查您的JavaScript是否发布了session_id:

new SWFUpload({
   ...
   post_params: {
     "PHPSESSID" : "<?php echo session_id(); ?>"
   }
}

并且,如果您的PHP脚本对发送的session_id做出反应。

if (isset($_POST["PHPSESSID"])) {
    session_id($_POST["PHPSESSID"]);
}
session_start();

session.auto_start应该在您的php.ini或.htaccess中禁用)

什么是.upload()? 它来自库/插件吗? 如果是这样,那是什么?

move_uploaded_file()调用是否成功执行?

从您描述的事件来看,这听起来像是表单已直接提交到page3。

您发布的代码似乎非常不完整(缺少javascript,缺少表单字段,缺少设置了$ _SESSION成员ab和c的位置)。 您应该创建一个简约的示例并发布完整的代码。

2 跨域ajax和php会话

我对此感到困惑...我正在执行远程微件类型的设置,我们将控制两个域,因此安全性不是问题。 我正在使用jsonp来允许跨域ajax请求。 访问的站点是domain1.com,其中包括: file.js使用jQuery发出ajax请求: 它在某种程度上通过向导完成了这些步骤中 ...

3 在同一个域中使用脚本中的API但在不同域中包含的API时出现跨域问题

我已经开发了一个JavaScript文件,该文件由我托管。 这个JavaScript文件正在调用一个Web API,我也可以托管它(我可以在同一域中托管它)。 问题是,我想让我的朋友在他的网站中使用如下标记来调用此JavaScript文件: 也就是说,我朋友的网站( myfrie ...

4 在同一PHP脚本中使用MySQL和PostgreSQL

我正在尝试从旧站点迁移到新站点。 旧站点使用MySQL,新站点使用PostgreSQL。 我的问题是我用PHP编写了一个迁移脚本,该脚本从旧数据库中查询信息,以便可以将它们插入同一脚本中的新数据库中。 我需要该脚本的原因是,由于表列不是一对一的匹配,因此我必须调用其他执行事务和操作数据的函 ...

5 使用jQuery在同一域中的Ajax请求

我有一个问题,我的客户在http://web-dev.test.com上 ,我的MVC服务在http://webdev01.test.com上 。 所以我试图从我的客户端使用ajax GET和POST json请求到mvc服务,但它给了我跨域错误。 任何人都可以解释我的问题是什么? 以及如 ...

6 PHP会话无法使用AJAX持久化

我正在制作一个网站(在本地开发),需要用户登录。 我以php-login.net框架为起点,并让我的代码与MySQL对话并创建了会话。 我已经解决了有关php会话和ajax的大多数问题 。 但是我仍然无法让我的代码按我想要的方式工作。 现在,在用户成功登录后,我正在使用ajax调 ...

7 使用AJAX / PHP无法多次增加会话变量

我尝试了几种尝试多次更新该会话变量的方法(即,使每次单击而不是第一次单击都增加),但是它不起作用。 我试图增加$ _SESSION ['idn']变量,以便在单击某个按钮/链接后再次使用。 “ incrementWeek.php”很简单: 几个常见问题的快速答案很少:sessi ...

8 无法使用jquery和php设置会话ajax

我想在单击表单上的按钮时向会话数组添加值。 我尝试使用jquery onclick,ajax和jquery来实现这一点。 但它似乎没有设置变量或返回任何东西。 在我的main.php中我有 在我的session.php中 我在页面底部调用jQuery.js。 它给 ...

9 无法访问使用Ajax调用的php脚本中的会话变量

请考虑以下情形。 我的服务器上有三个php文件,分别为file1.php,file2.php和file3.php。 file1.php启动会话并设置会话变量say,var。 我可以使用file2.php中的$ _SESSION ['var']访问var。 使用jquery ajax功能调 ...

10 PHP在一个域中登录,然后在另一个域中使用会话

因此,我必须将此变量发送到另一个网站。 如何以用户无法更改的方式发送它? 就像帐户ID一样,对于登录会话,由于用户通过Steam登录,因此他不需要输入密码(至少在站点上)。 我需要将他的帐户ID安全地传递到另一个域。 我的意思是,只要他无论如何都无法更改,我不在乎他是否会看到它。 有什 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM