我使用护照JS,express和mongoose来制作API。 当我在同一个域中测试它时,它保持会话并正常工作。 但是在跨域中它失败了。 任何线索如何使用相同的配置在跨域中维护会话。 以下是代码 ...
提示:本站收集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']; ?>
}
?>
如代码所示,我正在通过AJAX调用从page1.php到page2.php发布一些信息。 page2.php应该能够使用page1.php中的会话值,即$ _SESSION ['a'],$ _ SESSION ['b']和$ _SESSION ['c'],但不能。 为什么? 我怎样才能解决这个问题?
在完成一些处理并将响应发送回page1.php之后,page2.php将创建更多会话。 点击page1.php上的表单的提交按钮,页面将POST'ed到page3.php。 但是,当回显在page2.php中创建的SESSIONS信息时,它为空白,表示未使用来自page2.php的SESSIONS。 我怎样才能解决这个问题?
在查看以上结论之前,我查看了许多信息,并花了大约50个小时尝试对脚本进行不同的处理。 我的应用 是使用函数(不是OOPS)定制的,并且不使用任何PHP框架,由于我对OOP概念的了解受到限制,因此许多框架都是面向对象的,我什至不打算使用任何PHP框架。 我遇到了比赛条件,但是提供的解决方案并没有太大帮助。 我想到的最后一个解决方案是使用数据库来举行会话以及从数据库中查找和检索数据库,我真的想避免为任务创建表,编码和维护代码,就像在同一个域中跨页面保留会话一样简单。 。
所以我的要求是:在当前条件下,有没有一种方法可以通过简单的编码解决上述问题? 任何帮助表示赞赏。
谢谢。
编辑:另外,我在会议中包含敏感信息,无法使用GET或POST通过页面来回传递信息。 因此,使用SESSIONS对我真的很有帮助。 因此,如果有任何编码可以帮助我实现这一目标,那将非常有帮助。 谢谢。
从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的位置)。 您应该创建一个简约的示例并发布完整的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.