当从javascript到php文件进行异步调用时,如何确保php $ _session信息(我相信是基于cookie的)与异步请求一起发送?
我听说过所有HTTP请求都会发送cookie信息,但我发现jquery的$ .get()和$ .post()请求无法允许接收PHP文件读取$ _session信息。 / p>
接收php文件试图以正常方式读取$ _session信息:
session_start();
if(isset($_SESSION['user'])){
.....
如果通过Web浏览器直接访问接收php文件,则可以访问会话信息。
谢谢!
* update *
我发现session_start()命令失败了。该命令导致以下文件返回“0”而不是预期的“无会话可用”响应。
whois.php:
$s = session_start();
if($s){
if(isset($_SESSION['user'])){
if(isset($_POST['name'])){
echo $_SESSION['user']." ".$_POST['name'];
}elseif(isset($_GET['name'])){
echo $_SESSION['user']." ".$_GET['name'];
}
}else{
echo 'no user specified';
}
}else{
echo 'no session available';
}
为了彻底,我通过其直接URL导航到Web浏览器中测试了上面的php文件,并访问了php会话并输出了正确的响应。我想知道为什么它不能异步工作......
根据Pekka的要求,这是发出异步请求的php文件:
<?PHP
session_start();
if(isset($_GET['user'])){
$_SESSION['user'] = $_GET['user'];
}
?>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#response").html('---');
$("#form").submit(function(){
var formData = $(this).serialize();
$.post("whois.php",formData,function(data){
$("#response").html(data);
});
return false;
});
});
</script>
</head>
<body>
<form id="form">
<input name="name" type="text"/>
<input name="submit" type="submit"/>
</form>
<div id="response">
</div>
</body>
</html>
答案 0 :(得分:0)
我认为真正的问题出在PHP会话管理中。如果您执行session_start()
,就和执行fopen(SESSION_FILE, 'rw')
一样,换句话说,您正在打开会话文件进行写入。对于第一个请求,这没关系。但是在同一时间,服务器接受了第二个请求,并尝试完全一样:打开会话文件进行写入。这将在许多系统上失败。但是仍然很奇怪,我希望第一个请求能够完成,而第二个请求是waitig,第一个请求可以调用session_destroy()
或session_write_close()
。一旦完成或超时,第二个请求便可以访问该会话并继续工作...:)